萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 主從複寫常見異常排查手冊:6 大經典錯誤與解法

生產環境主從複寫最常遇到的 6 大異常:Relay Log 暴增、同步中斷、IO Thread 掛起、主鍵衝突、延遲過大、CHANGE MASTER 報錯,附標準排查流程與修復指令。

1. Relay Log 不斷增長 — 自動清理未開啟

# my.cnf [mysqld]
relay_log_purge = 1  # 預設即為 1,若為 0 請改回
# 重啟生效

SQL Thread 執行完 Event 後會自動判斷並刪除不再需要的 Relay Log。

2. 主從同步失敗 — 快速跳過錯誤恢復

-- 單次跳過 1 個 Event (到事務結束)
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1;
START SLAVE;

-- 指定錯誤碼永久跳過 (需重啟)
# my.cnf [mysqld]
slave_skip_errors = 1062,1032  # 常見:主鍵衝突、找不到行

⚠️ 跳過後主從資料**已不一致**,需配合 pt-table-checksum + pt-table-sync 修補。

3. IO Thread 持續 Connecting

排查順序:

  1. 網路通達性:telnet master_ip 3306、防火牆、Security Group。
  2. 複寫帳號密碼:SHOW GRANTS FOR 'repl'@'%'、密碼正確、主機名允許。
  3. MASTER_LOG_FILE/MASTER_LOG_POS 是否正確 (手動 CHANGE MASTER 易出錯)。
  4. Master binlog_format、binlog_row_image 相容性。

4. 錯誤 1062 主鍵衝突

常見於 Statement-based Replication (SBR) 非確定性函數 (UUID、NOW) 導致。

# 方案 A:改 Row-based
SET GLOBAL binlog_format = 'ROW';  -- 或 MIXED
# 方案 B:調整自增鎖模式
SET GLOBAL innodb_autoinc_lock_mode = 2;  -- interleaved (5.1.22+)

5. 從庫同步延遲大

可能原因排查指標
系統時間不同步date / ntpdate 對時
從庫硬體較弱 / IO 壓力大iostat -x 2, top, sar -n DEV
大事務/長鎖阻塞 SQL ThreadSHOW ENGINE INNODB STATUS\G 看鎖等待
單執行緒 SQL Thread 瓶頸升級 5.7+ 開啟 slave_parallel_workers
MyISAM 表鎖爭用盡量轉 InnoDB、減少長鎖操作

6. CHANGE MASTER 報 ERROR 1201

-- 原因:Slave 已有複寫中繼資料
RESET SLAVE ALL;  -- 5.5.16+ 含 GTID 資訊清除
-- 或舊版
RESET SLAVE;
STOP SLAVE;
CHANGE MASTER TO ...;
START SLAVE;

黃金檢查清單

SHOW SLAVE STATUS\G
-- 關注:Slave_IO_Running, Slave_SQL_Running, Seconds_Behind_Master,
-- Last_IO_Error, Last_SQL_Error, Relay_Master_Log_File, Exec_Master_Log_Pos

建立監控告警:Seconds_Behind_Master > 300 或 Slave_*_Running != Yes 立即通知。

copyright © 萬盛學電腦網 all rights reserved