Domanda

Ho bisogno di esportare i dati da una tabella a un CSV.Ho la seguente struttura (non proprio il mio tavolo ma per scopi demo)

CREATE TABLE `mytable` (
  `id` int(11) DEFAULT NULL,
  `mycolumn` varchar(25) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
.

con i dati (circa 3000 record).Ora voglio esportare alcuni di questi record (da uno script che corro via cronjob)

SELECT * INTO OUTFILE '/tmp/mytable.sql'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM mytable;
.

Mostra:

Query OK, 3 rows affected (0.00 sec)
.

Allora io faccio:

ls: cannot access /tmp/mytable.sql: No such file or directory
.

Dov'è il mio file?

È stato utile?

Soluzione

Quando si utilizza il comando INTO OUTFILE, esporta i dati nella cartella locale del server non quello che si esegue la query.

Esempio: sei sul computer (IP: 192.168.0.100) e ti connetti a MySQLServer (IP: 192.168.0.101) utilizzando il comando MySQL: mysql -uuser -h192.168.0.101 -A database.Eseguendo SELECT * INTO OUTFILE Il file viene salvato su MySQLServer (IP: 192.168.0.101) e non sul computer (IP: 192.168.0.100).

Ora, è possibile utilizzare uno script che crea un file CSV (nel tuo Cronjob: seleziona tutti i dati, generano il file e invia tramite SCP all'altro server).

o - È inoltre possibile avere un NFS montato su /shared/ e quando si crea automaticamente il file l'altro server.

o - puoi semplicemente eseguire un comando mysql in uno script bash come questo dal tuo primo server.

mysql -uroot test -B -e "select * from test.mytable;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > /tmp/filename.csv
.

Fonte: http://tlug.dnho.net/node/209

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top