MySQL Replication 遇到 1062 錯誤解法

MySQL Replication 的 Slave 突然停止,要如何找到問題並解決呢?

MySQL Replication 遇到 1062 錯誤解法

MySQL Slave 停止的話,可以從 show slave status \G 看問題,就可以找到是錯誤代號:1062 造成的

1062 的錯誤是 Table 裡面有 Duplicate Key (重複的 Primay key) 造成,解法這兩篇都有:

1062 發生的主因是 MySQL Slave 有一筆資料(PK id: 100),Master 沒有,但是 Master 寫入了一筆 (PK id: 100),然後 Master Log 寫入到 Slave,Slave 發現 Primary Key 重複,於是就卡住停止(理論上不該發生這種事)

通常解法就是跳過這筆,或者將 Slave 那筆資料刪除即可,跳過那筆的作法:

  1. STOP SLAVE SQL_THREAD;
  2. SET GLOBAL sql_slave_skip_counter = 1;
  3. START SLAVE SQL_THREAD;

現在 Linux 系統很多錯誤訊息都跟以往位置不太一樣,紀錄其它地方的 Log:

MySQL 遇到的錯誤訊息,現在在 /var/log/syslog

  • less /var/log/syslog # 搜尋:[ERROR]
    • Dec 12 01:11:01 mysqld[231995]: 2025-12-12T01:11:01.672990+08:00
    • [ERROR] Slave SQL for channel '': Worker 4 failed executing transaction 'ANONYMOUS' at master log mysql-bin.009016, end_log_pos 64252921;
    • Could not execute Write_rows event on table user;
    • Duplicate entry '42698053' for key 'PRIMARY', Error_code: 1062;
    • handler error HA_ERR_FOUND_DUPP_KEY; the event's master log mysql-bin.009016, end_log_pos 64252921, Error_code: 1062

上述錯誤訊息要注意的就是:mysql-bin.009016, end_log_pos 64252921;,要找到發生事情的語法:

  1. ssh master
  2. mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -vv mysql-bin.009016 --start-position=64252921 --stop-position=64253050 # 但是這邊只看到 commit 的語法
  3. 上述語法得往回去看的話,直接 mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -vv mysql-bin.009016 | less # 搜尋 64252921 後再往上拉即可

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料