Canalize gunzip e mysql para compactar um despejo e importá-lo

27

Eu tenho um arquivo .gz sql dump (exemplo: foo.sql.gz) que desejo importar no meu banco de dados com o comando mysql clássico.

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

mysql -uroot -ppassword foo < foo.sql

foo é o banco de dados.

Como posso canalizar esses dois comandos em um único?

Tentou

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

mas não parece funcionar; eu recebogzip: stdout: Broken pipe

apelliciari
fonte
6
Para sua informação, você realmente não deseja passar a senha do mysql na linha de comando. Isso faz com que seja armazenado em ~ / .bash_history para que todos possam ver. Se você acabou de colocar -p ele irá pedir que você digite sua senha que é muito mais seguro (e não quebrar o tubo zcat quer)
Thefreeman
1
Seu comando orignal funcionaria se gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Respostas:

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

Isso também deixará foo.sql.gzcomo está.

Nifle
fonte
1
Em termos de velocidade, isso funciona muito mais lentamente que o gunzip && mysql -e "use unzipped.sql".
podarok
13

Para aqueles em Max OSX há um bug com zcatque você vai precisar usar gzcatem seu lugar.

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

Todas as outras respostas recomendam a gravação da senha no comando. Essa é uma prática muito ruim e apresenta riscos à segurança. Por favor, não faça isso.

Você pode deixar a senha vazia no comando, pois solicitará que você digite a senha interativamente. Dessa forma, a senha não é salva no histórico do bash.

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