Pipe gunzip e mysql per gunzip una discarica e importarla


27

Ho un file di dump sql .gz (esempio: foo.sql.gz) che voglio importare nel mio database con il classico comando mysql.

gunzip -c foo.sql.gz > foo.sql

mysql -uroot -ppassword foo < foo.sql

foo è il database.

Come posso reindirizzare questi due comandi in uno solo?

Provato

gunzip -c foo.sql.gz | mysql -uroot -ppassword foo

ma non sembra funzionare; ottengogzip: stdout: Broken pipe


6
Cordiali saluti, non si vuole davvero passare la password mysql sulla riga di comando. Questo porta ad essere memorizzato in ~ / .bash_history per essere visto da tutti. Se hai appena inserito -p ti chiederà di inserire la tua password che è molto più sicura (e non rompe neanche la zcat pipe)
thefreeman

1
Il tuo comando originale funzionerebbe se gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada,

Risposte:


40
zcat foo.sql.gz | mysql -uroot -ppassword foo

Anche questo lascerà foo.sql.gzcom'è.


1
In termini di velocità questo funziona molto più lentamente di gunzip && mysql -e "usa unzipped.sql".
Podarok,

13

Per quelli su Max OSX c'è un bug con zcatquindi dovrai usare gzcatinvece.

gzcat foo.sql.gz | mysql -uroot -ppassword foo

2

Tutte le altre risposte raccomandano di scrivere la password nel comando. Questa è una brutta pratica e comporta rischi per la sicurezza. Per favore, NON FARLO .

Puoi lasciare la password vuota nel comando, che ti chiederà di inserire la password in modo interattivo. In questo modo la password non viene salvata nella cronologia di bash.

gunzip < dump.sql.gz | mysql -u username -p databasename
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.