MySQL 主從複制是實現資料庫高可用、讀寫分離與災備的核心技術。本文系統梳理主從架構原理,並以阿里雲為主庫、兩台 VPS 為從庫的真實業務場景為例,詳細記錄配置檔修改、授權建立、狀態檢查、故障排查與驗證同步的完整流程,適合運維工程師與 DBA 參考實施。
透過多節點冗余,可顯著提升資料庫可用性與讀取擴展性。
| 角色 | 主機 | IP 範例 | Server ID |
|---|---|---|---|
| Master | 阿里雲 ECS | 117.34.73.175 | 1 |
| Slave1 | VPS 節點 A | 192.168.145.226 | 2 |
| Slave2 | VPS 節點 B | 192.168.145.227 | 3 |
[mysqld]
log-bin=mysql-bin # 【必須】啟用二進制日誌
server-id=1 # 【必須】唯一 ID,建議取 IP 最後段
binlog-do-db=wordpress # 【可選】只同步指定庫,未設則同步所有
binlog-ignore-db=mysql # 【可選】忽略系統庫,避免帳號權限同步
說明: binlog-do-db 與 binlog-ignore-db 可配合使用,精確控制同步範圍。生產環境建議明確指定業務庫,避免系統表誤同步。
[mysqld]
log-bin=mysql-bin # 【必須】從庫也建議開啟 binlog,利於級聯或切主
server-id=2 # 【必須】唯一 ID,不可與 Master 或其他 Slave 重複
兩台 Slave 配置同理,僅 server-id 不同。
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'%' IDENTIFIED BY 'sync_password';
FLUSH PRIVILEGES;
安全建議: 將 '%' 限制為具體 Slave IP(如 '192.168.145.226'),減少攻擊面。
SHOW MASTER STATUS;
輸出範例:
+------------------+----------+-----------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+-----------------------+------------------+
| mysql-bin.000004 | 106 | wordpress,wordpress | mysql,mysql |
+------------------+----------+-----------------------+------------------+
關鍵記錄: File(mysql-bin.000004)與 Position(106)。執行完此命令後,切勿在 Master 執行任何寫操作,以免坐標變更導致同步起點錯誤。
登入 Slave,執行:
CHANGE MASTER TO
MASTER_HOST = '117.34.73.175',
MASTER_USER = 'sync',
MASTER_PASSWORD = 'sync_password',
MASTER_PORT = 3306,
MASTER_LOG_FILE = 'mysql-bin.000004',
MASTER_LOG_POS = 106;
START SLAVE;
SHOW SLAVE STATUS\G
重點檢查以下兩項 必須為 Yes:
Slave_IO_Running: Yes — I/O 線程正常連接 Master 拉取 binlogSlave_SQL_Running: Yes — SQL 線程正常重放 Relay Log若任一為 No,需檢查 Last_IO_Error 或 Last_SQL_Error 定位故障。
錯誤提示:error connecting to master 'sync@218.244.**.**:3306' – retry-time: 60 retries: 86400
mysql -h Master_IP -u sync -p 測試連線,排除網路不通。在 Master 執行建表、插入資料等操作,觀察 Slave 是否同步生效:
CREATE TABLE test_sync (id INT PRIMARY KEY, name VARCHAR(20));
INSERT INTO test_sync VALUES (1, 'replication_test');
登入 Slave 查詢 SELECT * FROM test_sync; 確認數據一致。
若配置錯誤需調整,先停止複制:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='new_ip';
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=106;
START SLAVE;
編寫 Shell/Python 監控腳本,定期檢查 Slave_IO_Running 與 Slave_SQL_Running,任一為 No 即發送郵件/短信告警,實現自動化巡檢。
掌握上述完整流程,即可在生產環境穩健部署 MySQL 主從架構,為業務高可用奠定堅實基礎。