Gunzip pipa dan mysql untuk gunzip dump dan impor

27

Saya memiliki file dump .gz sql (contoh: foo.sql.gz) yang ingin saya impor di database saya dengan perintah mysql klasik.

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

mysql -uroot -ppassword foo < foo.sql

foo adalah databasenya.

Bagaimana saya bisa menyalurkan dua perintah ini dalam satu perintah?

Mencoba

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

tetapi tampaknya tidak berhasil; saya mendapatgzip: stdout: Broken pipe

apelliciari
sumber
6
FYI Anda benar-benar tidak ingin meneruskan kata sandi mysql pada baris perintah. Ini membuatnya disimpan dalam ~ / .bash_history untuk dilihat semua orang. Jika Anda hanya meletakkan -p itu akan meminta Anda untuk memasukkan kata sandi yang jauh lebih aman (dan tidak merusak pipa zcat)
thefreeman
1
Perintah orignal Anda akan berfungsi jika gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Jawaban:

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

Ini juga akan meninggalkan foo.sql.gzapa adanya.

Nifle
sumber
1
Dalam hal kecepatan, ini bekerja jauh lebih lambat daripada gunzip && mysql -e "gunakan unzipped.sql".
podarok
13

Bagi yang menggunakan OSX Maks ada bug dengan zcatsehingga Anda harus menggunakannya gzcat.

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

Semua jawaban lain merekomendasikan penulisan kata sandi dalam perintah. Ini adalah praktik yang sangat buruk dan menimbulkan risiko keamanan. Tolong, JANGAN MELAKUKANNYA .

Anda dapat membiarkan kata sandi kosong di perintah, daripada meminta Anda memasukkan kata sandi secara interaktif. Dengan cara ini kata sandi tidak disimpan dalam bash history.

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