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


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.


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.