ตราบใดที่คุณไม่ทำคำสั่ง INSERT / UPDATE / DELETE โดยตรงบน Slave Slave ของคุณควรจะใช้ได้ มิฉะนั้นการจำลองแบบ MySQL อาจแตกถ้าคุณแทรกแถวใหม่ใน mydb.mytable บน Slave และผ่านการจำลองแบบ Slave จะตรวจสอบ INSERT ของแถวไปยัง mydb.mytable ด้วยคีย์หลักเดียวกัน สิ่งนี้สร้างข้อผิดพลาด 1,062 (คีย์ซ้ำ)
วิธีเดียวที่คุณสามารถเขียนถึง Slave โดยไม่ทำลาย MySQL Replication คือ:
- Master มีฐานข้อมูล db1, db2, db3
- Slave กำลังจำลองฐานข้อมูล db1, db2, db3 จาก Master
- คุณทำงาน
CREATE DATABASE db4;
บน Slave
- คุณทำ INSERTs / UPDATEs / DELETEs เพื่อ db4 บน Slave เท่านั้น
- คุณไม่ได้ทำ INSERTs / UPDATEs / DELETEs เฉพาะกับ db1, db2, db3 บน Slave เท่านั้น
ในการตรวจสอบว่า Master และ Slave ไม่ซิงค์โดยไม่ต้องดาวน์โหลดเครื่องมือใด ๆ ให้เลือกตารางใด ๆ และเรียกใช้CHECKSUM Table กับตารางบน Master และสำเนาของ Slave ของตารางเดียวกัน
ตัวอย่าง
หากคุณมีตารางmydb.mytable
ให้รันคำสั่งกับมัน:
mysql> CHECKSUM TABLE mydb.mytable;
หากค่าไม่กลับมาเหมือนเดิมแสดงว่าบางสิ่งไม่ซิงค์กัน
หากคุณต้องการตรวจสอบโต๊ะจำนวนมากคุณสามารถลง MAATKIT ของ Percona ได้ คุณจะต้องใช้เครื่องมือเฉพาะสองชุด (Percona ยังมีชุดเครื่องมือ Percona ที่แยกมาจาก MAATKIT ซึ่งกำลังได้รับการสนับสนุนเพิ่มเติม)
หรือ
pt-table-checksum
จะดำเนินการตารางตรวจสอบกับตารางทั้งหมดใน Master และ Slave คุณสามารถกำหนดค่าให้ทำฐานข้อมูลทั้งหมดในฐานข้อมูลเฉพาะ
pt-table-sync
สามารถเรียกใช้บน Slave เทียบกับตารางใดก็ได้ การใช้ตัวเลือก --print และ --sync-to-master คุณสามารถดูว่าคำสั่ง SQL ใดที่ต้องถูกเรียกใช้บน Slave เพื่อให้ตรงกับ Master อย่างสมบูรณ์ เครื่องมือนี้ใช้ไม่ได้กับตารางที่ไม่มีคีย์หลักหรือรหัสที่ไม่ซ้ำ
ฉันใช้ MAATKIT มาหลายปีแล้ว ฉันยังคงทำ ฉันยังไม่ได้ลอง Percona Toolkit แต่ฉันแน่ใจว่ามันควรจะมีคุณภาพเช่นเดียวกับ MAATKIT