首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主從不同步故障排查實戰:用 mysqlbinlog 定位錯誤位點跳過

     編輯:MySQL 資料庫相關知識

故障背景

主庫臨時建立庫表導入資料後,Slave 同步報錯 not found tmpdb.tmptable。嘗試用 CHANGE MASTER TO MASTER_LOG_POS 跳過卻導致 1162 錯誤,雙邊同步中斷。

解決思路:用 mysqlbinlog 精準定位下一條正常 SQL 位點

  1. 在 Master 二進制日志中搜尋錯誤 SQL 所在區間:
    mysqlbinlog --start-position=190000000 --stop-position=200000000 xxx.binlog | grep tmptable
  2. 將包含錯誤 SQL 的區段導出分析:
    mysqlbinlog --start-position=190000000 --stop-position=200000000 xxx.binlog | grep tmptable > /tmp/tmpbinlog
    vi /tmp/tmpbinlog  # 找到錯誤 SQL 後的下一個 `# at 123456789` 位點,記為 $NEXT_POS
  3. 在 Slave 執行跳過:
    CHANGE MASTER TO MASTER_LOG_POS=$NEXT_POS;
    START SLAVE;
  4. 檢查狀態:
    SHOW SLAVE STATUS\G
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes  # 同步恢復正常

補充:遇到 1062 主鍵衝突錯誤

在 Slave 設定檔 my.cnf 加入 slave-skip-errors=1062,重啟 Slave 即可跳過。

核心心法

不要輕易重做主從。善用 mysqlbinlog 精準定位位點,配合 CHANGE MASTER TO 微調同步進度,是 DBA 解決同步中斷的利器。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved