MySQL Replication(3.23.15+)基於 **二進制日志** 異步複製:
支持 **一主多從**、**級聯復制**(Slave 再做 Master)、**讀寫分離** 架構。
| 角色 | IP | Port | OS | MySQL |
|---|---|---|---|---|
| Master | 192.168.1.100 | 3306 | Win7 | 5.5.20 |
| Slave | 192.168.1.102 | 3306 | Win8 | 5.5.20 |
my.ini [mysqld] 區塊:
log-bin="D:/MYSQLDataBase/binlog"
expire_logs_days=10
max_binlog_size=100M
server-id=1
binlog-do-db=test
binlog-ignore-db=mysql
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY '123';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
-- File: binlog.000004, Position: 107
mysqldump -uroot -p -h127.0.0.1 test > D:\TEST.TXT
USE test; SOURCE D:\TEST.TXT;my.ini:
[mysqld]
server-id=2
# log-bin 等可選,若啟用需放在 [mysqld] 非 [mysql]
STOP SLAVE;
CHANGE MASTER TO
MASTER_HOST='192.168.1.100',
MASTER_USER='repl',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='binlog.000004',
MASTER_LOG_POS=107;
START SLAVE;
SHOW SLAVE STATUS\G
-- Slave_IO_Running: Yes, Slave_SQL_Running: Yes, Seconds_Behind_Master: 0
MASTER_LOG_FILE 寫錯(中文句號)[mysql] 區塊配 log-bin@'%' 遠程權限STOP SLAVE IO_THREAD; → SHOW PROCESSLIST 見 Slave has read all relay logSTOP SLAVE; RESET MASTER;(需先啟用 log-bin,否則報錯)SHOW MASTER STATUSserver-id、執行 CHANGE MASTER TO ... 指向新 Master、START SLAVE生產環境**強烈建議使用自動化工具**(MHA、Orchestrator、GTID+自動故障轉移腳本),手動切換僅供演練/應急。
| 參數 | 作用 |
|---|---|
log-slave-updates | Slave 寫入自身 Binlog,支撐級聯復制 |
master-connect-retry=60 | 連接失敗重試間隔(秒) |
read-only | 限制非超級用戶寫入 Slave,防誤寫 |
slave-skip-errors=1007,1051,1062 | 跳過指定錯誤碼(謹慎用,易導致數據不一致) |
sync_binlog=1 | 每事務 fsync Binlog,最安全(性能損耗 ~5倍) |
SHOW SLAVE STATUS\G 核心指標:Slave_IO_Running、Slave_SQL_Running、Seconds_Behind_MasterSHOW PROCESSLIST 觀察 I/O、SQL 線程 StateSeconds_Behind_Master > 300 觸發max_allowed_packet 雙邊一致slave_parallel_workers)max_allowed_packet 不一致導致大包傳輸失敗MySQL 主從復制是「高可用、讀寫分離、異地備份」的基石。**GTID 模式(5.6+)大幅簡化故障轉移**,建議新部署直接啟用 GTID。運維核心:**監控延遲、定期演練切換、保護 Binlog 完整性**。