1. 復制原理三步走
- Master 寫 Binlog(串行化事務)
- Slave I/O 線程拉取 Binlog 寫 Relay Log
- Slave SQL 線程回放 Relay Log(單線程串行,瓶頸所在)
2. 三種復制類型
- Statement-Based(SBR,預設,效率高,部分函數不安全)
- Row-Based(RBR,5.0+,記錄行變更,安全但 Binlog 大)
- Mixed(MBR,預設 SBR,遇不安全自動切 RBR)
3. 配置步驟
Master
server-id=1
log-bin=mysql-bin
Slave
server-id=2
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
建立復制賬號
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'slave_ip' IDENTIFIED BY 'pass';
啟動復制
CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='pass', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=0;
START SLAVE;
驗證
SHOW SLAVE STATUS\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
4. 常見拓撲
- 一主多從:讀寫分離、備份、異地災備
- 雙主雙向(Active-Active):雙寫,需解決衝突(自增步長/偏移)
- 雙主單向(Active-Passive):高可用,主掛切備
- 級聯:A→B→C,需
log_slave_updates
5. 過濾與新 Slave 掛載
- Master 端
binlog_do_db、Slave 端 replicate_do_table
- 新 Slave:冷備份/熱備份/
mysqldump --master-data=2 獲取快照 + Binlog 坐標