MySQL 復制功能支持多種拓撲,本文系統梳理主從、雙主互備、多級鏈式復制的配置參數、啟動驗證、常見故障處理與現代 GTID 模式遷移指引。
server-id/log-bin)backup@'10.10.10.%' IDENTIFIED BY '1234' (需 FILE/REPLICATION SLAVE 權限)backup
# Master (A) my.cnf
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=backup
# Slave (B) my.cnf
[mysqld]
server-id=2
master-host=10.10.10.22
master-user=backup
master-password=1234
master-port=3306
master-connect-retry=60
replicate-do-db=backup
啟動驗證:SHOW MASTER STATUS (A) / SHOW SLAVE STATUS \G (B) 確認 Slave_IO/SQL_Running=Yes、Seconds_Behind_Master=0。
在主從基礎上雙向添加對端為 Master:
# A 追加 Slave 配置 (指向 B)
master-host=10.10.10.53
master-user=backup
master-password=1234
master-connect-retry=10
replicate-do-db=backup
# B 追加 Master 配置 (自身)
log-bin=mysql-bin
binlog-do-db=backup
關鍵風險:雙寫衝突 (自增 ID 碰撞、唯一鍵衝突)。緩解方案:
auto_increment_offset / auto_increment_increment 錯開自增序列 (A: 1/2, B: 2/2)
# B 同時是 Slave (指向 A) 和 Master (開啟 log-bin)
# C 配置指向 B
master-host=B_IP
# 需在 B 開啟 log-slave-updates=1 將重放的 SQL 寫入自身 Binlog 供 C 拉取
SHOW SLAVE STATUS \G 定位 Last_Error/Last_IO_ErrorSET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE; (謹慎使用)master-connect-retry),檢查防火牆/VPN--master-data=2) 重建 SlaveSTART SLAVE 重啟線程
# 開啟 GTID
[mysqld]
gtid_mode=ON
enforce-gtid-consistency=ON
log-bin=mysql-bin
log-slave-updates=1
# Slave 簡化配置 (無需 master-host/log-file/position)
CHANGE MASTER TO MASTER_HOST='10.10.10.22', MASTER_USER='backup', MASTER_PASSWORD='1234', MASTER_AUTO_POSITION=1;
START SLAVE;
GTID 優勢:自動定位同步位點、故障切換無需手動對齊 Binlog、支援多源復制、簡化拓撲變更。