2012-01-26 9 views
8

ho bisogno di esportare i dati da una tabella a un csv. Ho la seguente struttura (non proprio la mia tabella ma per scopi dimostrativi)file non trovato dopo l'esportazione mysql

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

con dati (circa 3000 record). ora voglio esportare alcuni di questi record (da uno script ho eseguito attraverso 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) 

poi faccio:

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

dov'è il mio file ?

+1

C'è altro script in esecuzione che cancella la cartella/tmp? –

+0

@CornelGhiban no –

risposta

8

Quando si utilizza il comando INTO OUTFILE, esso esporta i dati nella cartella locale del server, non quella che si sta eseguendo la query.

Esempio: si è sul computer (ip: 192.168.0.100) e ci si connette a mysqlserver (ip: 192.168.0.101) utilizzando il comando mysql: mysql -uuser -h192.168.0.101 -A database. Eseguendo il 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 cronjob: si selezionano tutti i dati, si genera il file e si invia tramite scp all'altro server).

Oppure - È anche possibile montare un NFS su /shared/ e quando si crea il file automaticamente, l'altro server lo ha.

Or - si può semplicemente eseguire un comando mysql in uno script bash come questo dal 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

+0

qualsiasi soluzione preferita? –

+1

l'NFS è una buona soluzione se devi generare molti dati (come molti file). il "generare un file csv" può essere molto facile da compilare e può avere la personalizzazione (come params ecc ...) nella riga di comando, molto semplice e veloce, ma bisogna fare attenzione ai caratteri come le doppie virgolette, che potrebbero essere un po 'difficile da eseguire il debug (con il comando SED). –

+0

Ora vedo il file sul server mysql, non lo direi mai grazie per il tuo aiuto, penso che andrò con i file generati in csv. –