ASPECT # 1: การจำลองแบบ
ฉันไม่คิดอย่างนั้น
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
อยู่ด้วยกัน.
คนอื่นสงสัยเกี่ยวกับเรื่องนี้เช่นกัน
ปัญหาเกิดขึ้นจากกฎการจำลองแบบคำสั่งซื้อจะถูกประมวลผล ตามเอกสาร MySQL เกี่ยวกับกฎการจำลองแบบ :
หากระบุตัวเลือก --replicate-rewrite-db ตัวเลือกเหล่านี้จะถูกนำไปใช้ก่อนที่จะมีการทดสอบกฎการกรอง --replicate- *
แม้แต่เอกสาร MySQL บน replicate-rewrite-db ก็บอกว่า:
การแปลชื่อฐานข้อมูลเสร็จสิ้นก่อนที่จะทดสอบกฎ --replicate- *
การreplicate-wild-do-table
บังคับใช้หลังจากเขียนใหม่ มันจะไม่น่าแปลกใจถ้าคำสั่งนี้กำหนด INSERT ไว้ในตารางที่มีข้อมูลอยู่แล้ว
คุณอาจถามว่าข้อมูลมาที่นี่ได้อย่างไร
ASPECT # 2: mysqldump
การทำเช่นmysqldump --single-transaction
นี้ดูเหมือนจะเป็นวิธีที่ดีที่สุดในการทิ้งข้อมูล ณ เวลาที่กำหนด แต่น่าเสียดายที่มีจุดอ่อน:mysqldump --single-transaction
ALTER TABLE
หากตารางอยู่ภายใต้ALTER TABLE
คำสั่งใด ๆเช่น a DROP TABLE
และCREATE TABLE
ที่สามารถทำลายความสมบูรณ์ของการทำธุรกรรม mysqldump พยายามที่จะทำการถ่ายโอนข้อมูลในการตัดตาราง (ซึ่งเป็น DDL ใน MySQL จักรวาล) และวางและเพิ่มดัชนีสามารถ ก็จะก่อกวนเช่นกัน
คุณสามารถหาข้อมูลเพิ่มเติมว่าจากผลการดำเนินงาน MySQL บล็อกของที่ดีที่สุดเก็บไว้ mysqldump ลับ จริง ๆ แล้วฉันได้กล่าวถึงประเด็นนี้ในคำถามที่ผ่านมาซึ่งอธิบายถึง 12 คำสั่งที่สามารถทำลายความสมบูรณ์ของธุรกรรมของ mysqldump: การสำรองข้อมูล MySQL InnoDB
ข้อแม้
บทส่งท้าย
ด้านหนึ่งหรือทั้งสองด้านอาจมีส่วนช่วยให้การจัดแถวในระหว่าง mysqldump ที่ไม่ควรมีอยู่เนื่องจากกฎการเขียนใหม่หรือการแยกของ mysqldump ที่ถูกแทนที่
คำแนะนำ
ฉันจะทำการถ่ายโอนข้อมูล mysqlbinlog ของบันทึกการถ่ายทอดทั้งหมดตั้งแต่เริ่ม mysqldump เพื่อดู INSERT ทั้งหมดที่ Slave จะดำเนินการและดูว่าแถวเหล่านั้นมีอยู่แล้วบน Slave หรือไม่ ถ้าเป็นเช่นนั้นคุณอาจทำสองสิ่ง:
1: ข้ามข้อผิดพลาดคีย์ซ้ำทั้งหมด
เพียงเพิ่มส่วนนี้ลงใน my.cnf บน Slave
[mysqld]
slave-skip-errors=1062
skip-slave-start
และเริ่ม mysql ใหม่ จากนั้นเรียกใช้START SLAVE;
ข้อผิดพลาดคีย์ซ้ำทั้งหมดจะถูกข้าม เมื่อSeconds_Behind_Master
ถึง 0 ให้ลบบรรทัดเหล่านั้นและเริ่ม mysql ใหม่
2: ดาวน์โหลดเครื่องมือ percona
เครื่องมือที่คุณต้องการคือ
ใช้สิ่งเหล่านี้เพื่อค้นหาความแตกต่างใน Slave จากนั้นแก้ไขให้ถูกต้อง