本文為 MySQL 雙主同步(Master-Master)部署完整指南,涵蓋三種配置方式、GTID 模式最佳實踐、auto_increment 交錯避免主鍵衝突、啟動驗證、常見衝突處理、監控告警與故障切換 SOP,可直接用於生產環境。
Server A (192.168.1.1) ←→ Server B (192.168.1.2)
Master & Slave Master & Slave
前置條件:
- MySQL 版本一致 (建議 5.7+/8.0)
- 網路互通 3306
- server-id 唯一 (A=1, B=2)
- 啟用 binlog (ROW 格式)
- 專用同步賬號 (REPLICATION SLAVE)
- 同步前數據一致 (全量備份恢復)
MySQL 5.6+ 棄用 master-host 等參數,僅作歷史了解。
-- Server A
CREATE USER 'repl'@'192.168.1.2' IDENTIFIED BY 'ReplPass#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.2';
FLUSH PRIVILEGES;
-- Server B
CREATE USER 'repl'@'192.168.1.1' IDENTIFIED BY 'ReplPass#2024';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.1';
FLUSH PRIVILEGES;
[mysqld]
server-id = 1 # A=1, B=2
log-bin = mysql-bin
binlog-format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON
log-slave-updates = 1
sync_binlog = 1
innodb_flush_log_at_trx_commit = 1
auto_increment_increment = 2
auto_increment_offset = 1 # A=1, B=2
relay-log = relay-bin
# replicate-do-db = business_db # 建議全庫同步,用 ignore 過濾系統庫
replicate-wild-ignore-table = mysql.%,sys.%,performance_schema.%,information_schema.%
SHOW MASTER STATUS;
-- 記錄 File、Position
-- Server A (從 B 同步)
CHANGE MASTER TO
MASTER_HOST='192.168.1.2',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass#2024',
MASTER_AUTO_POSITION=1; -- GTID 模式
-- Server B (從 A 同步)
CHANGE MASTER TO
MASTER_HOST='192.168.1.1',
MASTER_USER='repl',
MASTER_PASSWORD='ReplPass#2024',
MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Retrieved_Gtid_Set / Executed_Gtid_Set # GTID 模式下對比
開啟 gtid_mode=ON、enforce_gtid_consistency=ON 後,CHANGE MASTER TO ... MASTER_AUTO_POSITION=1 即可,**無需手動管理 File/Position**,故障切換、新增從庫極其簡單。
auto_increment_increment=2 + offset=1/2,或用 UUID/雪花 ID。MASTER_CONNECT_RETRY=60、MASTER_RETRY_COUNT=86400(一天)。# 核心指標 (納入 Prometheus/Grafana)
Seconds_Behind_Master > 300 -- 告警
Slave_IO_Running != Yes -- 嚴重告警
Slave_SQL_Running != Yes -- 嚴重告警
Relay_Log_Space > 10GB -- 磁碟告警
Executed_Gtid_Set 落後 Retrieved_Gtid_Set -- GTID 模式延遲
START SLAVE 自動追趕 (GTID)。MySQL 雙主同步生產級部署 = **GTID + ROW + 雙1安全 + auto_increment 交錯 + log-slave-updates + 全庫同步忽略系統表 + 動態 CHANGE MASTER TO + 完整監控告警 + 定期切換演練**。**純雙主雙寫風險極高,強烈建議「一寫一備」+ 自動故障切換工具 (MHA/Orchestrator/ProxySQL)。**