主從復制中因從庫已有數據導致主庫 INSERT ... AUTO_INCREMENT 衝突,報 Error 1062: Duplicate entry '1' for key 'PRIMARY',SQL 線程停止。本文實測驗證 SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1 即可跳過單條衝突語句(官方文檔稱需 2),並給出完整診斷、跳過、驗證流程與 Binlog 事件對照分析。
SHOW BINLOG EVENTS IN 'mysql-bin.000203' FROM 14215101;
# Position 14215101: Intvar SET INSERT_ID=1
# Position 14215129: Query insert into tmp_test_0208(name) values('a'),('b'),('c')
單條 INSERT 產生 **兩個事件**:Intvar + Query。官方文檔稱需 SKIP_COUNTER=2,但實測 =1 即可跳過整條語句(MySQL 內部將兩事件視為一組)。
-- 主庫 SELECT * FROM tmp_test_0208 ORDER BY id; -- 從庫 SELECT * FROM tmp_test_0208 ORDER BY id; -- 對比行數、內容完全一致
SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE; 直至 Slave_SQL_Running: Yes。SET GTID_NEXT='aaa-bbb-ccc:ddd'; BEGIN; COMMIT; SET GTID_NEXT=AUTOMATIC; 空事務跳過,更精確可控。Seconds_Behind_Master 及 Last_SQL_Error,發現 1062 即時告警。