雙主(Master-Master)實現雙向同步,提供寫入高可用。核心難點:自增 ID 衝突、雙寫衝突、同步延遲監控。
Server A (10.16.0.246) ←→ Server B (10.16.0.247)
Master/Slave Master/Slave
auto_increment_offset=1 auto_increment_offset=2
auto_increment_increment=2
/etc/my.cnf[mysqld]
server_id = 1
log_bin = mysql-bin
binlog_format = ROW
binlog_do_db = cdn
# 雙主防衝突核心參數
auto_increment_offset = 1
auto_increment_increment = 2
# 從庫參數(作為 B 的從庫)
relay_log = relay-bin
log_slave_updates = 1
read_only = 0 -- 雙主雙寫需開啟,單寫可設 1
# 超時/重試
slave_net_timeout = 60
master_connect_retry = 60
/etc/my.cnf[mysqld]
server_id = 2
log_bin = mysql-bin
binlog_format = ROW
binlog_do_db = cdn
auto_increment_offset = 2
auto_increment_increment = 2
relay_log = relay-bin
log_slave_updates = 1
read_only = 0
slave_net_timeout = 60
master_connect_retry = 60
-- Server A
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.16.0.247' IDENTIFIED BY 'strong_pass';
FLUSH PRIVILEGES;
-- Server B
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.16.0.246' IDENTIFIED BY 'strong_pass';
FLUSH PRIVILEGES;
SHOW MASTER STATUS\G:File、Position-- Server B
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='10.16.0.246',
MASTER_USER='repl',
MASTER_PASSWORD='strong_pass',
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=106;
START SLAVE;
SHOW MASTER STATUS-- Server A
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='10.16.0.247',
MASTER_USER='repl',
MASTER_PASSWORD='strong_pass',
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=106;
START SLAVE;
SHOW SLAVE STATUS\G
-- 關鍵指標必須為 Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0 -- 延遲秒數,生產環境監控告警閾值建議 > 10s
-- 詳細檢查
Last_IO_Error:
Last_SQL_Error:
Exec_Master_Log_Pos: 106
Relay_Log_Space: 256
| 策略 | 實現 | 適用場景 |
|---|---|---|
| 自增步長/偏移 | offset=1/2, increment=2 | 所有雙主,必配 |
| 業務分片寫入 | 奇數 ID 寫 A,偶數 ID 寫 B | 應用層路由,根治衝突 |
| 單寫模式 | 一主寫、一主備(read_only=1) | 低併發、強一致性要求 |
| 唯一鍵約束 | 業務唯一鍵防重複 | 輔助防線 |
| GTID 複制 (5.6+) | GTID_MODE=ON, ENFORCE_GTID_CONSISTENCY=ON | 自動定位、故障切換更安全 |
Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Runningpt-table-checksum 數據一致性校驗雙主非銀彈:引入雙寫衝突風險、同步延遲、運維複雜度。優先考慮:單主多從 + MHA/Orchestrator 自動故障切換。雙主僅適用於:跨機房雙活、業務可明確分片、極高寫入可用性要求且接受最終一致性。