mysqldumps กับ InnoDB และ MyISAM ร่วมกันถือว่าเป็นเอกสิทธิ์เฉพาะบุคคล นี่คือเหตุผล:
หากคุณสามารถเข้าสู่ mysql ขณะที่ mysqldump อยู่ในระหว่างดำเนินการคุณจะเห็นสิ่งนี้:
SELECT /* SQL_NO_CACHE */ * FROM tblname
โดยค่าเริ่มต้น mysqldump จะทำสิ่งต่อไปนี้:
- ทุกฐานข้อมูลจะถูกทิ้งตามลำดับตัวอักษร
- ทุกตารางที่ดัมพ์ต่อฐานข้อมูลจะถูกดัมพ์ตามลำดับตัวอักษร (โดยไม่คำนึงถึงเอ็นจินการเก็บข้อมูล)
สิ่งนี้ควรใช้ได้สำหรับ MySQL Instance ที่ไม่มีกิจกรรมฐานข้อมูลอื่น ตาราง InnoDB และตาราง MyISAM จะไม่ส่งผลกระทบต่อกันและกัน
การใช้งาน--single-transaction
อินสแตนซ์ MySQL InnoDB MySQL ทั้งหมดสร้างจุดตรวจสอบและทิ้งตารางทั้งหมดจากจุดเวลาเดียวกัน เมื่อพบตาราง MyISAM การเดิมพันทั้งหมดจะปิด อาจทำให้ตาราง InnoDB ทั้งหมดหลังจาก MyISAM ถูกเททิ้งจากจุดเวลาอื่น
เพื่อให้การถ่ายโอนข้อมูล ณ จุดเวลาสอดคล้องกันสำหรับส่วนผสมของ InnoDB และ MyISAM คุณมีตัวเลือก
ตัวเลือกที่ 1
รีสตาร์ท mysql เพื่อให้ไม่มีใครสามารถเข้าสู่ระบบผ่าน TCP / IP จากนั้น mysqldump
service mysql restart --skip-networking --skip-grant-tables
mysqldump --routines --triggers --all-databases > MySQLData.sql
service mysql restart
OPTION # 2
หากตาราง MyISAM ทั้งหมดสำหรับการอ่านเท่านั้นเพียง mysqldump โดยใช้ --single-transaction
OPTION # 3
หากตาราง MyISAM ใด ๆ กำลังถูกเขียน - ธุรกรรมเดี่ยวไม่เพียงพอ
คุณจะทำสิ่งต่อไปนี้:
mysql -u... -p... -e"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)"
sleep 30
mysqldump --routines --triggers --all-databases > MySQLData.sql
ทันทีหลังจากที่ mysqldump เสร็จแล้วเข้าสู่ระบบ MySQL show processlist;
และทำ ค้นหาคิวSELECT SLEEP(86400)
รีค้นหา ID กระบวนการและเรียกใช้KILL <procidnumn>;