ฉันกำลังพยายามโหลดตัวอย่างข้อมูลขนาดเล็กจากฐานข้อมูลขนาดใหญ่ไปยังฐานข้อมูลทดสอบ
คุณจะบอก mysqldump เพียงเพื่อให้คุณบันทึก n จาก 8 ล้านเท่านั้น?
ขอบคุณ
ฉันกำลังพยายามโหลดตัวอย่างข้อมูลขนาดเล็กจากฐานข้อมูลขนาดใหญ่ไปยังฐานข้อมูลทดสอบ
คุณจะบอก mysqldump เพียงเพื่อให้คุณบันทึก n จาก 8 ล้านเท่านั้น?
ขอบคุณ
คำตอบ:
ตามที่ skaffman พูดให้ใช้ตัวเลือก--where :
mysqldump --opt --where="1 limit 1000000" database
แน่นอนว่าจะให้คุณล้านแถวแรกจากทุกตาราง
SELECT * from table WHERE
SELECT * from table WHERE 1 limit 1000000
หากไม่มี 1 คุณจะมีข้อความค้นหาไม่ถูกต้อง การระบุ 1 สำหรับส่วนคำสั่ง (ตั้งแต่ 1 เป็นจริงเสมอ) เพียงเลือกระเบียนทั้งหมด
mysqldump --opt --where="1 limit 1000000 offset 1000000" --no-create-info database
เพื่อรับหน้าที่สองของ 1 ล้านบันทึก ตรวจสอบให้แน่ใจว่าใช้แฟล็ก --no-create-infoบนเพจอื่นที่ไม่ใช่เพจแรกเพื่อถ่ายโอนข้อมูลเท่านั้นและไม่ต้องสร้างสิ่งตาราง
หากคุณต้องการรับn
บันทึกจากตารางที่ระบุคุณสามารถทำสิ่งนี้:
mysqldump --opt --where="1 limit 1000000" database table > dump.sql
นี้จะถ่ายโอนข้อมูลครั้งแรก1000000
แถวจากตารางที่มีชื่อลงในแฟ้มtable
dump.sql
mysqldump สามารถให้แบบสอบถาม SQL เพื่อดำเนินการจากนั้นจะใช้ข้อมูลสำหรับการถ่ายโอนข้อมูล จากนั้นคุณสามารถใช้ส่วน "จำกัด X" ในแบบสอบถามของคุณเพื่อ จำกัด จำนวนแถว
เนื่องจากคำสั่งเริ่มต้นคือ ASC ซึ่งไม่ค่อยเป็นสิ่งที่คุณต้องการในสถานการณ์นี้คุณต้องมีการออกแบบฐานข้อมูลที่เหมาะสมเพื่อให้ DESC ทำงานนอกกรอบ หากตารางทั้งหมดของคุณมีคอลัมน์คีย์หลักหนึ่งคอลัมน์ที่มีชื่อเดียวกัน (เป็นธรรมชาติหรือตัวแทน) คุณสามารถดัมพ์บันทึกล่าสุดโดยใช้:
mysqldump --opt --where="1 ORDER BY id DESC limit 1000000" --all-databases > dump.sql
นี่คือเหตุผลที่สมบูรณ์แบบว่าทำไมคุณควรตั้งชื่อIDของคุณ PK และหลีกเลี่ยงการรวม PK ของแม้ในตารางการเชื่อมโยง (ใช้คีย์ตัวแทนแทน)