ฉันจะโหลดไฟล์ sql.gz ไปยังฐานข้อมูลของฉันได้อย่างไร (นำเข้า)


150

ฉันพยายามนำเข้าไฟล์ gzipped SQL ลงใน mysql โดยตรง นี่เป็นวิธีที่ถูกต้องหรือไม่

mysql -uroot -ppassword mydb > myfile.sql.gz

14
ไม่สนใจแม้แต่ด้าน gzip ของคำถามที่ลูกศรชี้ไปทางที่ผิด ...
แมตต์เฟลตเชอร์

คำตอบ:


238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>จะเขียนผลลัพธ์ของmysqlคำสั่งstdoutลงในไฟล์myfile.sql.gzซึ่งส่วนใหญ่อาจไม่ใช่สิ่งที่คุณต้องการ นอกจากนี้คำสั่งนี้จะแจ้งให้คุณใส่รหัสผ่านของผู้ใช้ MySQL "root"


15
เพื่อความปลอดภัยฉันจะใส่รหัสผ่านของฉันในบรรทัดคำสั่งฉันจะให้ mysql ถาม
ศ. Moriarty

9
หรือดียิ่งขึ้น: สร้าง~/.my.cnfโดยใช้ข้อมูลรับรอง ;)
joschi

5
ในฐานะ @Prof. โมริอาร์ตีอธิบายคุณสามารถแก้ไขคำสั่งเพื่อไม่ให้ใช้รหัสผ่านzcat /path/to/file.sql.gz | mysql -u 'root' -p your_databaseได้ มันจะรู้ว่าพารามิเตอร์สุดท้ายคือฐานข้อมูลที่คุณต้องการใช้ไม่ใช่รหัสผ่านของคุณ
bafromca

6
เพื่อแก้ไขความคิดเห็น @ Prof.Moriarty ของเล็กน้อยการรักษาความปลอดภัยที่ดีจะไม่ใส่รหัสผ่านของฉันในบรรทัดคำสั่ง (ที่มันจะถูกเก็บไว้ในประวัติศาสตร์หรือมองข้ามไหล่ของคุณ) และให้ MySQL ขอมัน แฟล็ก -p เพียงอย่างเดียวจะทำให้ MySQL ถามพร้อมต์สำหรับรหัสผ่าน
จอร์จ

4
+1 สำหรับสิ่งที่ปล่อยให้การถ่ายโอนข้อมูลฐานข้อมูลประณามถูกบีบอัด
Dmitri DB

81

หากต้องการแสดงแถบความคืบหน้าในขณะที่นำเข้าไฟล์ sql.gz ให้ดาวน์โหลดpvและใช้สิ่งต่อไปนี้:

pv mydump.sql.gz | gunzip | mysql -u root -p

ใน CentOS / RHEL คุณสามารถติดตั้ง pv yum install pvได้

ใน apt-get install pvDebian

ใน MAC brew install pv


2
pvดูเหมือนว่าจะอยู่ใน repos ของ Ubuntu ด้วย (อย่างน้อยก็ใน 12.04 LTS) แต่ก็ต้องทำอีกครั้งเพื่อsudo apt-get install pvให้ได้มา ขอบคุณ Banjer นี่เหมาะสำหรับการนำเข้าฐานข้อมูลขนาดใหญ่!
toon81

ฉันต้องเรียกใช้ pv mydump.sql.gz | gunzip | mysql -u root my_database_name นั่นเป็นเพราะฉันกำลังนำเข้าตารางและฉันไม่มีรหัสผ่านสำหรับผู้ใช้รูทของฉัน
Cristiano Mendonça

ใน MACbrew install pv
ทำคะแนน

54

วิธีที่ง่ายที่สุดคือการแตกไฟล์ฐานข้อมูลก่อนนำเข้า ยังเป็นที่กล่าวถึงโดย@Prof โมริอาร์ตีคุณไม่ควรระบุรหัสผ่านในคำสั่ง (คุณจะถูกขอรหัสผ่าน) คำสั่งนี้มาจากwebcheatsheetจะทำการคลายซิปและนำเข้าฐานข้อมูลในครั้งเดียว

gunzip < myfile.sql.gz | mysql -u root -p mydb

1
นอกจากนี้ต้องสร้าง mydb ก่อนนำเข้า สิ่งนี้ไม่สร้าง db สำหรับคุณ
Siddhartha

ฉันพบว่าgunzipการบีบอัดไฟล์ที่บีบอัด 10GB ทำให้การนำเข้าของฉันหยุดลง ไม่แน่ใจว่าเป็นเพราะข้อ จำกัด ของหน่วยความจำหรือบางอย่าง แต่ฉันทำผิดพลาดในการทำทีละขั้นในอนาคต
Ryan Tuck

@RyanTuck นั่นคือการผลักดันขีด จำกัด ของชนิดของกระบวนการเหล่านี้ :)
icc97

@Siddhartha ที่ขึ้นอยู่กับไฟล์ sql dump บางครั้งพวกเขารวมถึงการสร้างคำสั่งฐานข้อมูล
rooby

@rooby ที่ทำให้รู้สึก
Siddhartha


5

ใน macOS ฉันใช้สิ่งนี้:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

ใส่รหัสผ่านของคุณและ voila!


4

ตรวจสอบด้วยว่ามีคำสั่ง USE ใด ๆ ในไฟล์ SQL หรือไม่ การระบุฐานข้อมูลที่บรรทัดคำสั่งไม่ได้รับประกันว่าข้อมูลจะจบลงที่นั่นหากระบุปลายทางอื่นภายในไฟล์ SQL


2
คุณเพียงแค่ต้องขยายคำสั่งดังนี้: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. คำตอบที่ยอมรับใช้วิธีนี้
bafromca

1

สำหรับไฟล์บีบอัดbzip2 (.sql.bz2) ให้ใช้:

bzcat <file> | mysql -u <user> -p <database>

หรือ

pv <file> | bunzip2 | mysql -u <user> -p <database>

เพื่อดูแถบความคืบหน้า


0

คุณสามารถใช้-c, --stdout, --to-stdoutตัวเลือกของgunzipคำสั่ง

ตัวอย่างเช่น:

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