| 角色 | IP | Server ID |
|---|---|---|
| Master | 192.168.0.102 | 1 |
| Slave | 192.168.0.104 | 2 |
server-id=1
log-bin=C:\Program Files\MySQL\MySQL Server 5.5\mysql-bin
binlog-do-db=test1 # 只同步指定庫,多庫多行
# binlog-ignore-db=mysql # 或排除系統庫
重啟服務:`net stop mysql && net start mysql`,驗證產生 `mysql-bin.000001`、`mysql-bin.index`。
GRANT REPLICATION SLAVE, RELOAD, SUPER ON *.*
TO 'slave'@'192.168.0.104' IDENTIFIED BY 'root';
FLUSH PRIVILEGES;
SHOW MASTER STATUS;
-- 記錄 File (如 mysql-bin.000001) 與 Position (如 107)
server-id=2
replicate-do-db=test1
# replicate-ignore-db=mysql
重啟服務。
CHANGE MASTER TO
MASTER_HOST='192.168.0.102',
MASTER_USER='slave',
MASTER_PASSWORD='root',
MASTER_LOG_FILE='mysql-bin.000001', -- 用 SHOW MASTER STATUS 值
MASTER_LOG_POS=107;
SHOW SLAVE STATUS\G
-- 關鍵指標:
Slave_IO_Running: Yes -- IO 線程讀取 Binlog 正常
Slave_SQL_Running: Yes -- SQL 線程重放正常
Seconds_Behind_Master: 0 -- 延遲秒數,0 為同步
| 現象 | 原因 | 處理 |
|---|---|---|
| IO_Running=No | 網路/帳號/防火牆/主庫 Binlog 刪除 | 檢查連線、權限、主庫 `expire_logs_days` |
| SQL_Running=No | 重放錯誤 (主鍵衝突、結構差異) | `SHOW SLAVE STATUS\G` 看 `Last_SQL_Error`,修正或 `SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;` |
| Seconds_Behind_Master 偏大 | 從庫硬體弱/長事務/鎖等待 | 優化從庫索引、升級硬體、並行複寫 (5.6+ `slave_parallel_workers`) |
-- 兩庫 my.ini 均加入:
auto_increment_increment = 2
auto_increment_offset = 1 -- 主庫1
auto_increment_offset = 2 -- 主庫2
log-slave-updates = 1 -- 將重放事件寫入自身 Binlog,傳遞給下游
應用層需路由寫入:奇數 ID 寫主庫1,偶數 ID 寫主庫2,避免主鍵衝突。
MySQL 主從同步成熟穩定,配合讀寫分離中間件 (ProxySQL、MyCat、ShardingSphere) 可構建高擴展讀寫分離架構。