ข้อมูล mysqldump เท่านั้น


297

ฉันกำลังมองหาไวยากรณ์สำหรับการทิ้งข้อมูลทั้งหมดในฐานข้อมูล mysql ของฉัน ฉันไม่ต้องการข้อมูลตารางใด ๆ


คำตอบ:


553
mysqldump --no-create-info ...

นอกจากนี้คุณอาจใช้:

  • --skip-triggers: ถ้าคุณใช้ทริกเกอร์
  • --no-create-db: ถ้าคุณใช้--databases ...ตัวเลือก
  • --compact: ถ้าคุณต้องการกำจัดความคิดเห็นเพิ่มเติม

47
นี่คือ cmd เต็มรูปแบบสำหรับ paster คัดลอกmysqldump -u USERNAME -h HOST --no-create-info --skip-triggers YOURDATABASENAME YOURTABLENAME --where='id=12345678'
Yzmir Ramirez

2
หากคุณได้รับAccess denied for user ... to database '...' when doing LOCK TABLESให้ใช้--single-transaction
Rolf

@YzmirRamirez ขอบคุณ แต่ FYI บน windows --whereผมใช้คำพูดคู่สำหรับ ตัวอย่างเช่น--where="id=2"
Kip

นี่คือโปรแกรมรักษาที่ยอดเยี่ยมสำหรับฉัน ขอบคุณ
Ken Ingram

149

สิ่งนี้น่าจะใช้ได้:

# To export to file (data only)
mysqldump -u [user] -p[pass] --no-create-info mydb > mydb.sql

# To export to file (structure only)
mysqldump -u [user] -p[pass] --no-data mydb > mydb.sql

# To import to database
mysql -u [user] -p[pass] mydb < mydb.sql

หมายเหตุ:ไม่มีที่ว่างระหว่าง-p&[pass]


12
--no-create-dbซ้ำซ้อนเมื่อใช้--no-create-info
James McMahon

4
ช่องว่างหลังจากนั้น-pไม่เป็นไร
ขอบคุณ

12
โดยทั่วไปจะดีกว่าเพียงใช้ -p โดยไม่ต้องป้อนรหัสผ่านเพื่อไม่ให้เก็บรหัสผ่านในประวัติทุบตีของคุณ (คุณจะได้รับแจ้งให้ป้อนรหัสผ่านหลังจากที่คุณเรียกใช้คำสั่ง)
ด่าน

2
นอกเหนือจากคำแนะนำของ @ Dan แล้วยังทำให้ผู้ใช้สามารถมองเห็นรหัสผ่านที่แสดงรายการกระบวนการปัจจุบันได้ด้วย ( ps -ef)
TMG

1
การปล่อยรหัสผ่านหลังจาก-pตัวเลือกจะmysqldumpแจ้งให้ใส่รหัสผ่าน
Melle

22
 >> man -k  mysqldump [enter in the terminal]

คุณจะพบคำอธิบายด้านล่าง

- ไม่มีการสร้างข้อมูล -t

อย่าเขียนคำสั่ง CREATE TABLE ที่สร้างแต่ละตารางที่ดัมพ์อีกครั้ง หมายเหตุตัวเลือกนี้ไม่ได้แยกคำสั่งที่สร้างกลุ่มล็อกไฟล์หรือพื้นที่ตารางจากเอาต์พุต mysqldump อย่างไรก็ตามคุณสามารถใช้ตัวเลือก --no-tablespaces เพื่อจุดประสงค์นี้

- ไม่มีข้อมูล -d

ห้ามเขียนข้อมูลแถวของตารางใด ๆ (นั่นคือห้ามดัมพ์เนื้อหาของตาราง) สิ่งนี้มีประโยชน์หากคุณต้องการดัมพ์เฉพาะคำสั่ง CREATE TABLE สำหรับตาราง (ตัวอย่างเช่นเพื่อสร้างสำเนาเปล่าของตารางโดยการโหลดไฟล์ดัมพ์)

# To export to file (data only)
mysqldump -t -u [user] -p[pass] -t mydb > mydb_data.sql

# To export to file (structure only)
mysqldump -d -u [user] -p[pass] -d mydb > mydb_structure.sql

3
มีเหตุผลในการใช้ตัวเลือก '-t' และ '-d' สองครั้งหรือไม่
erwan

19

หากคุณต้องการคำสั่ง INSERT ให้ใช้คำสั่งต่อไปนี้:

mysqldump --skip-triggers --compact --no-create-info


ขอบคุณ--compactที่กำจัดข้อความแสดงความคิดเห็นเพิ่มเติม
chiliNUT

2

อยากจะแนะนำให้ใช้ตัวอย่างต่อไปนี้ ทำงานได้ดีแม้กับตารางขนาดใหญ่ (ไม่เช่นนั้นคุณจะเปิดการถ่ายโอนข้อมูลในเครื่องมือแก้ไขและตัดสิ่งที่ไม่ต้องการใช่ไหม?)

mysqldump --no-create-info --skip-triggers --extended-insert --lock-tables --quick DB TABLE > dump.sql

อย่างน้อยต้องใช้mysql 5.xแต่ใครจะใช้ของเก่าในปัจจุบัน .. :)


ฉันวิ่งเข้าไปในสถานการณ์เมื่อเร็ว ๆ นี้ที่ต้องเชื่อมต่อกับระบบที่ใช้ 4.x ในการผลิต พวกเขามีช่องว่างในชื่อตารางและคอลัมน์และในความคิดของฉันพวกเขาทำทุกอย่างผิดปกติ
Elkvis


0

ลองดัมพ์เป็นไฟล์ที่มีการคั่น

mysqldump -u [username] -p -t -T/path/to/directory [database] --fields-enclosed-by=\" --fields-terminated-by=,

0

เมื่อพยายามส่งออกข้อมูลโดยใช้คำตอบที่ยอมรับฉันได้รับข้อผิดพลาด:

ERROR 1235 (42000) at line 3367: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'

ดังกล่าวข้างต้น:

mysqldump --no-create-info

จะส่งออกข้อมูล แต่จะส่งออกคำสั่งสร้างทริกเกอร์ด้วย ถ้าชอบโครงสร้างฐานข้อมูลที่แสดงผลของคุณ (ซึ่งรวมถึงทริกเกอร์) ด้วยคำสั่งเดียวจากนั้นใช้คำสั่งด้านบนเพื่อรับข้อมูลคุณควรใช้ '--skip-triggers'

ดังนั้นหากคุณต้องการเพียงแค่ข้อมูล:

mysqldump --no-create-info --skip-triggers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.