從庫複制中斷,SHOW SLAVE STATUS\G 顯示:
Last_SQL_Error: Query caused different errors on master and slave.
Error on master: message (format)='Cannot delete or update a parent row: a foreign key constraint fails' error code=1217
Error on slave: actual message='no error', error code=0.
Query: 'DROP TABLE IF EXISTS `table1` /* generated by server */'
replicate-do-db / replicate-ignore-db)。sas_basic)中,理論上不應出現在從庫 Relay Log。DROP TABLE IF EXISTS `table1` 確實在 sas_basic 執行。USE db 切換庫後執行 DROP TABLE,若從庫設有 replicate-do-db 或 replicate-ignore-db,會導致錯誤不同步,從庫報錯 1217 而主庫實際執行成功(或反之)。-- 主庫
CREATE DATABASE db1;
USE db1;
CREATE TABLE table1 (ID BIGINT PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE table2 (ID BIGINT AUTO_INCREMENT PRIMARY KEY, DIVISION_ID BIGINT,
FOREIGN KEY (DIVISION_ID) REFERENCES table1(ID) ON DELETE CASCADE) ENGINE=InnoDB;
DROP TABLE IF EXISTS table1; -- 觸發 Bug
replicate-do-db=test 或 replicate-ignore-db=test 均會觸發。承諾在 5.6.30 和 5.7.12 修復(生產環境 5.6.26 中招)。
USE db 上下文中跨庫操作 DDL**,改用全名 DROP TABLE IF EXISTS `db1`.`table1`;(但實測仍可能觸發,需升級版本徹底解決)。SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; 跳過(風險:可能導致數據不一致)。replicate-do-db 和 replicate-ignore-db。USE db + 外鍵關聯表 DROP TABLE + 選擇性複制規則。