| 故障類型 | 典型現象 | 核心原因 | 修復策略 |
|---|---|---|---|
| I/O 線程故障 (Slave_IO_Running=No) | Last_IO_Error: Connect/Timeout/Authentication/Binlog | 網路、認證、Master Binlog 損壞、防火牆 | 檢查連通性 → 修正 CHANGE MASTER TO → 重新定位 Binlog 位點 |
| SQL 線程故障 (Slave_SQL_Running=No) | Last_SQL_Error: 1062/1032/1452/DDL | 主鍵衝突、行找不到、外鍵失敗、結構不一致 | 跳過錯誤 (風險) / pt-table-sync 修復 / 重建 Slave |
# 1. Slave 停止複寫
STOP SLAVE;
# 2. Master 獲取最新位點
SHOW MASTER STATUS;
# 記錄 File, Position (如 mysql-bin.000020, 135617781)
# 3. Slave 重新指向
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='repl',
MASTER_PASSWORD='pass',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql-bin.000020',
MASTER_LOG_POS=135617781;
# 4. 啟動複寫
START SLAVE;
# 5. 驗證
SHOW SLAVE STATUS\G
# Slave_IO_Running: Yes, Slave_SQL_Running: Yes, Seconds_Behind_Master: 0
風險:若 Master Binlog 已輪轉 (expire_logs_days),指定位點可能不存在 → 需重新備份建立 Slave。
優點:徹底解決結構漂移、累積錯誤,狀態乾淨。
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter = 1; -- 跳過 1 個事件組
START SLAVE;
# 觀察幾秒後再次 SHOW SLAVE STATUS
# 若仍報錯,重複執行 (記錄總跳過數,超過 5 次建議改方案一)
原理:跳過當前 Relay Log 中導致錯誤的事件組 (一個事務可能包含多個事件)。
嚴重警告:跳過導致主從資料不一致,必須事後pt-table-checksum校驗並pt-table-sync修復。
# 1. 獲取 SQL 線程已執行到的 Master 位點
SHOW SLAVE STATUS\G
# 記錄 Relay_Master_Log_File, Exec_Master_Log_Pos
# 2. 重新 CHANGE MASTER TO 指向該位點 (系統會丟棄舊 Relay Log 重新下載)
STOP SLAVE;
CHANGE MASTER TO
MASTER_LOG_FILE='Relay_Master_Log_File值',
MASTER_LOG_POS=Exec_Master_Log_Pos值;
START SLAVE;
# 1. 一致性校驗 (非阻塞、線上可執行)
pt-table-checksum --recurse=1 --databases=db1,db2 \
h=master,u=repl,p=pass P=3306 \
h=slave,u=repl,p=pass P=3306
# 2. 產生差異報告
pt-table-checksum --replicate=percona.checksums --report
# 3. 同步修復 (生成 REPLACE/INSERT/DELETE SQL,可先 --print 再 --execute)
pt-table-sync --sync-to-master h=slave,u=repl,p=pass --databases=db1 --print
pt-table-sync --sync-to-master h=slave,u=repl,p=pass --databases=db1 --execute
rpl_semi_sync_master_enabled=1,Master 確認至少一 Slave 收到 Binlog 再 Commit,極大降低資料遺失。pt-table-checksum,發現不一致立即修復,避免雪球效應。Seconds_Behind_Master > 300、Slave_IO_Running=No、Slave_SQL_Running=No 接入 Prometheus/Alertmanager → PagerDuty/企業微信/釘釘。主從故障 90% 可預防。建立「部署標準化 → 監控全覆蓋 → 校驗常態化 → 演練機制化」四位一體體系,故障處理從「救火」轉為「按預案執行」。