ท่อ gunzip และ mysql เพื่อ gunzip การถ่ายโอนข้อมูลและนำเข้ามัน


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
คำสั่ง orignal ของคุณจะทำงานถ้า gunzip <foo.sql.gz | mysql -uroot -ppassword foo
Yada

คำตอบ:


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

สิ่งนี้จะทิ้งไว้foo.sql.gzเหมือนเดิม


1
ในแง่ของความเร็วนี้ทำงานได้ช้ากว่า gunzip && mysql -e "use unzipped.sql"
podarok


2

คำตอบอื่น ๆ ทั้งหมดแนะนำให้เขียนรหัสผ่านในคำสั่ง นี่เป็นวิธีปฏิบัติที่ไม่ดีและมีความเสี่ยงด้านความปลอดภัย โปรดอย่าทำอย่างนั้น

คุณสามารถปล่อยให้รหัสผ่านว่างเปล่าในคำสั่งกว่าจะให้คุณป้อนรหัสผ่านแบบโต้ตอบ วิธีนี้จะไม่บันทึกรหัสผ่านในประวัติทุบตี

gunzip < dump.sql.gz | mysql -u username -p databasename
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.