Pipe gunzip ve mysql, bir dökümü gunziplemek ve ithal etmek için


27

Klasik mysql komutuyla veritabanımda içe aktarmak istediğim bir .gz sql döküm dosyasına (örnek: foo.sql.gz) sahibim.

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

mysql -uroot -ppassword foo < foo.sql

foo veritabanıdır.

Bu iki komutu tek bir sıraya nasıl aktarabilirim?

Denenmiş

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

ama işe görünmüyor; alırımgzip: stdout: Broken pipe


6
Bilginize gerçekten mysql şifresini komut satırında iletmek istemezsiniz. Bu, herkesin görmesi için ~ / .bash_history'de saklanmasına yol açar. Sadece -p koyarsanız size çok daha güvenli olduğu şifrenizi girmenizi ister (ve ya zcat borusunu sonu yok)
thefreeman

1
Orignal komutu eğer gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

Yanıtlar:


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

Bu aynı zamanda foo.sql.gzolduğu gibi bırakacaktır .


1
Hız açısından bu, gunzip && mysql -e "use unzipped.sql" den çok daha yavaş çalışır.
podarok

13

Max OSX üzerinde olanlar için orada bir hata ile zcatkullanmak gerekir böylece gzcatyerine.

gzcat foo.sql.gz | mysql -uroot -ppassword foo

2

Diğer tüm cevaplar şifreyi komuta yazmanızı tavsiye ediyor. Bu çok kötü bir uygulamadır ve güvenlik riskleri doğurur. Lütfen YAPMAYIN söyledi.

Şifreyi komutta boş bırakabilirsiniz, şifreyi etkileşimli olarak girmenizi isteyecektir. Bu şekilde şifre bash geçmişine kaydedilmez.

gunzip < dump.sql.gz | mysql -u username -p databasename
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.