當資料庫讀寫壓力激增,採用「一主多從」架構分流讀請求、實現熱備是經典方案。本文記錄 Windows (Master) 同步至 Linux (Slave) 的跨平台部署全過程,包含配置差異處理、關鍵參數解析、以及實戰遇到的 master.info 導致的同步中斷案例與解決方案。
| 角色 | OS | MySQL 版本 | IP |
|---|---|---|---|
| Master | Windows | 5.0.51 | 192.168.1.156 |
| Slave | Linux | 5.0.67 | 192.168.1.154 |
同步目標資料庫:account。兩側採用各自預設安裝配置,未強制對齊參數文件。
修改 my.ini(Windows 下通常為 ini):
[mysqld]
server-id = 1
log-bin = d:/log-bin.log
binlog-do-db = account
原理補充:Slave 透過兩條線程同步——I/O 線程 從 Master 3306 端口拉取 Binlog 寫入本地 Relay-log;SQL 線程 讀取 Relay-log 重放邏輯,完成同步。
建立同步專用帳號:
GRANT REPLICATION SLAVE ON *.* TO 'sync_user'@'192.168.1.154' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
將 account 庫完整備份導入 Slave(mysqldump --master-data=2 可記錄 Binlog 位置)。
修改 /etc/my.cnf:
[mysqld]
server-id = 2
master-host = 192.168.1.156
master-user = sync_user
master-password = password
master-port = 3306
replicate-do-db = account
重啟兩側 MySQL 服務。
d:/log-bin.log 是否生成 Binlog 檔案。/var/lib/mysql/hostname.err),依錯誤碼精準排查。將 log-bin 路徑從 D 槽移至其他磁碟後重啟,同步失效,錯誤日誌報:
"count not find first log file name in binary log in..."
Slave 端 datadir 下的 master.info 檔案記錄了「從哪個 Binlog 檔案、哪個位置開始同步」。Master 更換 Binlog 路徑後,檔案命名從頭開始(如 log-bin.000001),但 master.info 仍記舊檔名 log-bin.000003,導致 Slave 找不到對應檔案。
master.info 內容範例:
14
log-bin.000003
337
192.168.1.156
sync_user
password
3306
60
0
STOP SLAVE;master.info(或 RESET SLAVE ALL; 5.1+ 支援)CHANGE MASTER TO 指向新 Binlog 起始位置(可在 Master 執行 SHOW MASTER STATUS; 獲取)START SLAVE;同步恢復正常。
Seconds_Behind_Master、Slave_IO_Running/Slave_SQL_Running、Binlog 增長速率。CHECKSUM TABLE 或 pt-table-checksum 驗證資料一致性。掌握核心原理與故障排查思路,跨平台 MySQL 主從同步即可穩健落地。