| 模式 | 拓撲 | 寫入端 | 適用場景 |
|---|---|---|---|
| 單向主從 | A → B | A | 讀寫分離、報表庫、備份庫 |
| 雙主互備 | A ⇄ B | A & B | 高可用、雙活寫入 (需防衝突) |
| 環狀多主 | A → B → C → A | 多點 | 跨資料中心、極高可用 |
backuprepl_user / StrongPass!-- 兩節點皆執行
CREATE DATABASE backup;
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'10.10.10.%' IDENTIFIED BY 'StrongPass!';
FLUSH PRIVILEGES;
[mysqld]
server-id=1
log-bin=mysql-bin
binlog-do-db=backup
binlog-format=ROW -- 建議 ROW 格式
sync_binlog=1 -- 最大持久性
innodb_flush_log_at_trx_commit=1
[mysqld]
server-id=2
relay-log=relay-bin
read-only=1
replicate-do-db=backup
master-host=10.10.10.22
master-user=repl_user
master-password=StrongPass!
master-port=3306
master-connect-retry=60
# Master 熱備份並記錄座標
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS; -- 記錄 File, Position
UNLOCK TABLES;
# Slave 還原備份後
CHANGE MASTER TO
MASTER_HOST='10.10.10.22',
MASTER_USER='repl_user',
MASTER_PASSWORD='StrongPass!',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=154;
START SLAVE;
SHOW SLAVE STATUS\G
在單向基礎上,雙方皆加入對方為 Master:
master-host=10.10.10.53
master-user=repl_user
master-password=StrongPass!
master-connect-retry=10
replicate-do-db=backup
log-bin=mysql-bin
binlog-do-db=backup
[mysqld]
auto_increment_increment=2
auto_increment_offset=1 -- A 設 1, B 設 2
# 或啟用 GTID (5.6+)
gtid_mode=ON
enforce_gtid_consistency=ON
SHOW SLAVE STATUS\G 檢查 Last_IO_Error/Last_SQL_Error。STOP SLAVE; START SLAVE;。relay-log 損壞:RESET SLAVE ALL; 重新 CHANGE MASTER TO。Seconds_Behind_Master < 10s 正常,> 300s 告警。master-host 等舊參數,全面改用 CHANGE MASTER TO 動態配置。GTID + MASTER_AUTO_POSITION=1,免記錄 File/Position。Replication Applier 多執行緒 (slave_parallel_workers=4) 加速回放。Orchestrator / MHA 實現自動故障轉移。複寫是 MySQL 高可用基石,配置雖繁但邏輯清晰:Binlog → Relay Log → SQL Thread,掌握三線程模型即能舉一反三。