पाइप गनज़िप और मस्कल को डंप गनज़िप करने और आयात करने के लिए


27

मेरे पास एक .gz sql डंप फ़ाइल (उदाहरण: foo.sql.gz) है जो मैं अपने डेटाबेस में क्लासिक mysql कमांड के साथ आयात करना चाहता हूं।

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

mysql -uroot -ppassword foo < foo.sql

foo डेटाबेस है।

मैं इन दोनों आदेशों को एक ही में कैसे पाइप कर सकता हूं?

कोशिश की

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

लेकिन काम करने के लिए प्रतीत नहीं होता; मुझे मिलाgzip: stdout: Broken pipe


6
FYI करें आप वास्तव में कमांड लाइन पर mysql पासवर्ड पास नहीं करना चाहते हैं। इसके कारण इसे सभी में देखने के लिए ~ / .bash_history में संग्रहीत किया जा रहा है। यदि आप बस डाल -p यह आपको अपना पासवर्ड दर्ज करने के लिए संकेत देगा जो कि अधिक सुरक्षित है (और zcat पाइप को भी नहीं तोड़ता है)
Thefreeman

1
अगर आप गनज़िप <foo.sql.gz | mysql -uroot -ppassword foo
यदा

जवाबों:


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

यह भी foo.sql.gzवैसे ही रहेगा ।


1
गति के मामले में यह गनज़िप और& mysql -e "unzipped.sql" का उपयोग करने की तुलना में बहुत अधिक धीमी गति से काम करता है।
पोडरोक

13

मैक्स OSX पर उन लोगों के लिए एक बग है zcatजिससे आपको gzcatइसके बजाय उपयोग करने की आवश्यकता होगी ।

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

2

अन्य सभी उत्तर कमांड में पासवर्ड लिखने की सलाह दे रहे हैं। यह एक बहुत बुरा अभ्यास है और सुरक्षा जोखिम पैदा करता है। कृपया ऐसा मत करो

आप कमांड में पासवर्ड खाली छोड़ सकते हैं, क्योंकि यह आपको इंटरेक्टिव रूप से पासवर्ड दर्ज करने के लिए कहेगा। इस तरह से पासवर्ड को bash हिस्ट्री में सेव नहीं किया जाता है।

gunzip < dump.sql.gz | mysql -u username -p databasename
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.