MySQL 3.23.15+ 引入的複製功能,是高可用、讀寫分離、異地災備的基石。本文基於實戰環境 (Windows Server 2000 + MySQL 4.0.4),詳細記錄 主從單向 與 雙主互備 兩種架構的配置步驟、關鍵參數、故障處理與效能驗證。
| 角色 | IP | MySQL 版本 | Server ID |
|---|---|---|---|
| Master (A) | 10.10.10.22 | 4.0.4-beta-max-nt-log | 1 |
| Slave (B) | 10.10.10.53 | 4.0.4-beta-max-nt-log | 2 |
-- 1. 建立同步專用帳號 (雙向各建一次)
GRANT FILE ON *.* TO 'backup'@'10.10.10.53' IDENTIFIED BY '1234'; -- A 上建立 B 連線用
GRANT FILE ON *.* TO 'backup'@'10.10.10.22' IDENTIFIED BY '1234'; -- B 上建立 A 連線用
-- 2. 建立同步目標資料庫
CREATE DATABASE backup;
server-id = 1
log-bin = mysql-bin # 啟用二進位日誌
# log-bin = C:/mysqlbak/mysqlbinlog # 可指定日誌目錄與前綴
binlog-do-db = backup # 僅記錄 backup 資料庫變更 (可選,減少日誌體積)
重啟服務,驗證:SHOW MASTER STATUS; 記錄 File 與 Position。
server-id = 2
master-host = 10.10.10.22
master-user = backup
master-password = 1234
master-port = 3306
master-connect-retry = 60 # 重試間隔 60 秒
replicate-do-db = backup # 僅同步 backup 資料庫
重啟服務,驗證:SHOW SLAVE STATUS\G 關注:
Slave_IO_Running: Yes (I/O 執行緒連線 Master 讀取 Binlog)Slave_SQL_Running: Yes (SQL 執行緒重放 Relay Log)Seconds_Behind_Master: 0 (延遲秒數)Slave 啟動後自動生成 master.info 記錄同步座標。**修改 Slave 配置前必須刪除此檔**,否則新配置不生效。
在單向基礎上,雙方互為 Master/Slave。
master-host = 10.10.10.53
master-user = backup
master-password = 1234
replicate-do-db = backup
master-connect-retry = 10
log-bin = C:/mysqlbak/mysqlbinlog
binlog-do-db = backup
auto_increment_increment = 2; auto_increment_offset = 1 (產生 1,3,5...)auto_increment_increment = 2; auto_increment_offset = 2 (產生 2,4,6...)SHOW SLAVE STATUS\G 中 Last_Error、Last_SQL_Error.err 錯誤日誌檔案START SLAVE; 恢復同步| 錯誤 | 原因 | 處理 |
|---|---|---|
| Duplicate entry for key PRIMARY | 雙主自增 ID 衝突 | 配置 auto_increment_offset/increment 錯開 |
| Relay log read failure | 網路中斷導致 Relay Log 損毀 | STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE=..., MASTER_LOG_POS=...; START SLAVE; |
| Table doesn't exist | DDL 未同步 / 表結構不一致 | 手動同步結構,或使用 pt-table-sync |
GTID_MODE=ON,自動定位同步位置,無需手動管理 File/PositionMASTER_DELAY=3600 延遲 1 小時同步,防誤操作rpl_semi_sync_master=ON,至少一個 Slave 收到才提交binlog_format=ROW (預設),資料一致性最高MySQL 複製架構演進:
📋 主從單向:讀寫分離、報表分流、備份卸載
🔄 雙主互備:高可用雙活,**必須解決自增 ID 衝突與雙寫路由**
⚙️ 核心參數:server-id、log-bin、binlog-do-db、replicate-do-db、master-host/user/password
🔧 運維鐵律:修改 Slave 配置必刪 master.info、監控 Seconds_Behind_Master、定期 pt-table-sync 校驗一致性