環境信息
- 版本:MySQL 4.1.7-standard-log (雙端一致)
- Master:RedHat 9.0, IP 192.168.0.1
- Slave:RedHat 7.3, IP 192.168.0.2
Master 配置 (my.cnf)
[mysqld]
log-bin = mysql-bin
server-id = 1
Slave 配置 (my.cnf)
[mysqld]
log-bin = mysql-bin
server-id = 2
master-host = 192.168.0.1
master-user = rep
master-password = rep
master-port = 3306
master-connect-retry = 60
初始化數據同步步驟
- Master:清空舊 binlog(或備份),打包全部數據目錄(含 ibdata*)
- Slave:清空舊 binlog,解壓 Master 數據包覆蓋自身數據目錄
- Master:啟動,創建同步賬號
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'%' IDENTIFIED BY 'rep'; FLUSH PRIVILEGES;
- Slave:啟動,檢查同步狀態
SHOW SLAVE STATUS\G
常見故障與解決
| 現象 | 原因 | 解決 |
| Slave_IO_Running: No | 網絡不通/賬號密碼錯誤/防火牆 | telnet master 3306 / 檢查 GRANT / 開放端口 |
| Slave_SQL_Running: No | SQL 執行錯誤(主鍵衝突/表不存在等) | 查看 Last_Error / 手動修正數據 / SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1 |
| Seconds_Behind_Master 偏大 | Slave 執行慢/長事務/鎖等待 | 優化 Slave 查詢 / 升級硬件 / 並行複製(5.6+) |
| Binlog 序號不匹配 | 重新初始化未清理舊 binlog | 雙端 RESET MASTER / RESET SLAVE 後重新同步 |
關鍵調試命令
-- Master 查看 binlog
SHOW MASTER STATUS;
SHOW BINLOG EVENTS IN 'mysql-bin.000001';
-- Slave 重新定位同步點
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=123;
START SLAVE;
-- 監控同步延遲
SHOW SLAVE STATUS\G
-- 關注 Seconds_Behind_Master, Slave_IO_Running, Slave_SQL_Running
生產環境建議 (現代版本 5.7/8.0)
- 使用 GTID 模式 (
gtid_mode=ON) 簡化故障轉移
- 啟用半同步複製 (
rpl_semi_sync_master=ON) 保證數據不丟失
- 配置多線程 Slave (
slave_parallel_workers=4) 提升回放性能
- 監控系統接入 Prometheus + Grafana 告警