首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從復制 Duplicate Key 1062 錯誤急救:SQL_SLAVE_SKIP_COUNTER 精準跳過

     編輯:MySQL 綜合教學

MySQL 主從復制 Duplicate Key 1062 錯誤急救:SQL_SLAVE_SKIP_COUNTER 精準跳過

主從復制中因從庫已有數據導致主庫 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。
  • GTID 模式下推薦用 SET GTID_NEXT='aaa-bbb-ccc:ddd'; BEGIN; COMMIT; SET GTID_NEXT=AUTOMATIC; 空事務跳過,更精確可控。
  • 監控腳本定期檢查 Seconds_Behind_Master 及 Last_SQL_Error,發現 1062 即時告警。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved