Pipe gunzip und mysql, um einen Dump zu gunzipieren und zu importieren

19132
apelliciari

Ich habe eine .gz-sql-Dump-Datei (Beispiel: foo.sql.gz), die ich mit dem klassischen mysql-Befehl in meine Datenbank importieren möchte.

gunzip -c foo.sql.gz > foo.sql  mysql -uroot -ppassword foo < foo.sql 

foo ist die Datenbank.

Wie kann ich diese beiden Befehle in einem einzigen Befehl ausführen?

Versucht

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

scheint aber nicht zu funktionieren; Ich bekommegzip: stdout: Broken pipe

24
FYI you really do not want to pass the mysql password on the command line. This leads to it being stored in ~/.bash_history for all to see. If you just put -p it will prompt you to enter your password which is much safer (and doesn't break the zcat pipe either) thefreeman vor 11 Jahren 6
Ihr ursprünglicher Befehl würde funktionieren, wenn gunzip <foo.sql.gz | MySQL -uroot -Passwort Foo Yada vor 11 Jahren 1

3 Antworten auf die Frage

36
Nifle
zcat foo.sql.gz | mysql -uroot -ppassword foo 

Dies wird auch so bleiben foo.sql.gzwie es ist.

In Bezug auf die Geschwindigkeit arbeitet dies viel langsamer als gunzip && mysql -e "use unzipped.sql". podarok vor 8 Jahren 1
12
SammyK

Für die auf Max OS X gibt es einen Fehler mit, zcatso dass Sie benötigen, um zu verwenden, gzcatstatt.

gzcat foo.sql.gz | mysql -uroot -ppassword foo 
0
Елин Й.

Bei allen anderen Antworten wird empfohlen, das Kennwort in den Befehl zu schreiben. Dies ist eine sehr schlechte Praxis und birgt Sicherheitsrisiken. Bitte tu das NICHT.

Sie können das Kennwort im Befehl leer lassen, und Sie werden aufgefordert, das Kennwort interaktiv einzugeben. Auf diese Weise wird das Passwort nicht in der Bash-Historie gespeichert.

gunzip < dump.sql.gz | mysql -u username -p databasename