異地雙主互備是 MySQL 高可用的經典模式:兩節點互為主從,寫入任一節點自動同步至另一節點,單點故障秒級切換。本文以生產實戰案例,完整記錄配置步驟、關鍵參數、同步驗證、網絡中斷恢復、同步失效修復全流程。
[mysqld]
# 基礎複制
log-bin=mysql-bin # 開啟二進位日誌
relay-log=relay-bin # 中繼日誌
relay-log-index=relay-bin-index
server-id=1 # 唯一標識,雙主必須不同
# 雙主互指
master-host=10.240.136.149 # 對端 IP
master-user=tongbu # 同步專用帳號
master-password=123456
master-port=3306
master-connect-retry=30 # 重試間隔(秒)
# 過濾規則
binlog-do-db=umsdb # 僅記錄此庫
replicate-do-db=umsdb # 僅同步此庫
replicate-ignore-table=umsdb.boco_tb_menu
replicate-ignore-table=umsdb.boco_tb_connect_log
... (其它忽略表)
# 關鍵網絡容錯參數(後文補充)
slave-net-timeout=60 # 從庫讀取超時重連秒數,預設 3600 秒太長
注意:MySQL 5.1+ 建議用 CHANGE MASTER TO 動態配置,而非寫死 my.cnf。
-- ServA 執行
GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'10.240.136.149' IDENTIFIED BY '123456';
-- ServB 執行
GRANT REPLICATION SLAVE ON *.* TO 'tongbu'@'10.240.136.9' IDENTIFIED BY '123456';
最小權限原則:僅授 REPLICATION SLAVE,不可用 ALL PRIVILEGES。
STOP SLAVE;LOAD DATA FROM MASTER;(僅 MyISAM 有效,InnoDB 需 xtrabackup/mysqldump)START SLAVE;SHOW SLAVE STATUS\G
核心健康指標:
Slave_IO_Running: Yes — I/O 線程連接主庫正常Slave_SQL_Running: Yes — SQL 線程重放日誌正常Seconds_Behind_Master: 0 — 延遲秒數,非 0 表追趕中Last_Errno: 0 / Last_Error: — 無錯誤拔網線模擬故障,恢復後 Slave_IO_Running: No 長時間不自動恢復。
預設 slave-net-timeout=3600(1 小時),從庫 1 小時才發現連接斷開並重試。
# my.cnf [mysqld] 區段新增
slave-net-timeout=60
# 重啟生效
service mysqld restart
配合 master-connect-retry=30,實現分鐘級自動恢復。
-- 從庫
SHOW SLAVE STATUS\G -- 記下 Master_Log_File, Read_Master_Log_Pos
-- 主庫
SHOW MASTER LOGS; -- 確認該檔案存在
-- 從庫
START SLAVE; -- 直接續傳
-- 1. 雙雙停止複制
STOP SLAVE; -- 從庫
STOP SLAVE; -- 主庫(若也是從)
-- 2. 從庫重新全量同步
LOAD DATA FROM MASTER; -- 僅 MyISAM
-- 或 xtrabackup/mysqldump + 恢復 (InnoDB)
-- 3. 重置雙端複制座標
RESET MASTER; -- 從庫(清空本地 binlog)
RESET SLAVE; -- 從庫(清空 relay log)
START SLAVE; -- 從庫
-- 4. 主庫同步重置
RESET SLAVE; -- 主庫
START SLAVE; -- 主庫
警告:LOAD DATA FROM MASTER 會鎖表、僅支援 MyISAM,生產環境嚴禁使用;請改用 Percona XtraBackup 熱備份 + CHANGE MASTER TO 指定新座標。
auto_increment_increment=2, auto_increment_offset=1/2)。gtid_mode=ON,簡化故障轉移與座標管理。Seconds_Behind_Master > 300、Slave_*_Running != Yes、Last_Errno != 0 立即告警。pt-table-checksum / pt-table-sync 檢測數據一致性。