Pipe gunzip y mysql para descomprimir un vertedero e importarlo

27

Tengo un archivo de volcado .gz sql (ejemplo: foo.sql.gz) que quiero importar en mi base de datos con el comando clásico mysql.

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

mysql -uroot -ppassword foo < foo.sql

foo es la base de datos.

¿Cómo puedo canalizar estos dos comandos en uno solo?

Intentó

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

pero no parece funcionar; yo obtengogzip: stdout: Broken pipe

apelliciari
fuente
66
Para su información, realmente no desea pasar la contraseña mysql en la línea de comando. Esto lleva a que se almacene en ~ / .bash_history para que todos lo vean. Si solo pone -p, le pedirá que ingrese su contraseña, que es mucho más segura (y tampoco rompe la tubería de zcat)
thefreeman
1
Su comando original funcionaría si gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Respuestas:

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

Esto también se irá foo.sql.gzcomo está.

Nifle
fuente
1
En términos de velocidad, esto funciona mucho más lento que gunzip && mysql -e "use unzipped.sql".
podarok
13

Para aquellos en Max OSX hay un error, por zcatlo que deberá usarlo gzcaten su lugar.

gzcat foo.sql.gz | mysql -uroot -ppassword foo
SammyK
fuente
2

Todas las demás respuestas recomiendan escribir la contraseña en el comando. Esta es una práctica muy mala y plantea riesgos de seguridad. Por favor NO HAGAS eso.

Puede dejar la contraseña vacía en el comando, ya que le pedirá que ingrese la contraseña de forma interactiva. De esta manera, la contraseña no se guarda en el historial de bash.

gunzip < dump.sql.gz | mysql -u username -p databasename
Елин Й.
fuente