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

27

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 weiterleiten?

Versucht

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

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

apelliciari
quelle
6
Zu Ihrer Information, Sie möchten das MySQL-Passwort wirklich nicht in der Befehlszeile weitergeben. Dies führt dazu, dass es für alle sichtbar in ~ / .bash_history gespeichert wird. Wenn Sie nur -p eingeben, werden Sie aufgefordert, Ihr Kennwort einzugeben, was viel sicherer ist (und auch die zcat-Pipe nicht unterbricht)
thefreeman
1
Ihr ursprünglicher Befehl würde funktionieren, wenn gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Antworten:

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

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

Nifle
quelle
1
In Bezug auf die Geschwindigkeit arbeitet dies viel langsamer als gunzip && mysql -e "use unzipped.sql".
Podarok
13

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
SammyK
quelle
2

Bei allen anderen Antworten wird empfohlen, das Kennwort im Befehl zu schreiben. Dies ist eine sehr schlechte Praxis und birgt Sicherheitsrisiken. Bitte TUN SIE DAS NICHT .

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

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