Pipe gunzip et mysql pour gunzip un vidage et l'importer

27

J'ai un fichier de vidage sql .gz (exemple: foo.sql.gz) que je veux importer dans ma base de données avec la commande mysql classique.

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

mysql -uroot -ppassword foo < foo.sql

foo est la base de données.

Comment puis-je diriger ces deux commandes en une seule?

A tenté

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

mais ne semble pas fonctionner; Je reçoisgzip: stdout: Broken pipe

apelliciari
la source
6
Pour info vous ne voulez vraiment pas passer le mot de passe mysql sur la ligne de commande. Cela conduit à ce qu'il soit stocké dans ~ / .bash_history pour que tous puissent le voir. Si vous venez de mettre -p, vous serez invité à entrer votre mot de passe, ce qui est beaucoup plus sûr (et ne rompt pas non plus le tuyau zcat)
thefreeman
1
Votre commande d'origine fonctionnerait si gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Réponses:

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

Cela restera également foo.sql.gztel quel.

Nifle
la source
1
En termes de vitesse, cela fonctionne beaucoup plus lentement que gunzip && mysql -e "use unzipped.sql".
podarok
13

Pour ceux sur Max OSX, il y a un bug avec zcatvous devrez donc utiliser à la gzcatplace.

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

Toutes les autres réponses recommandent d'écrire le mot de passe dans la commande. Il s'agit d'une très mauvaise pratique et présente des risques pour la sécurité. Veuillez NE PAS FAIRE cela.

Vous pouvez laisser le mot de passe vide dans la commande, il vous demandera de saisir le mot de passe de manière interactive. De cette façon, le mot de passe n'est pas enregistré dans l'historique de bash.

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