首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 主從複制完整配置教學:從架構原理到實戰部署

     編輯:MySQL 資料庫相關知識

MySQL 主從複制是實現資料庫高可用、讀寫分離與災備的核心技術。本文系統梳理主從架構原理,並以阿里雲為主庫、兩台 VPS 為從庫的真實業務場景為例,詳細記錄配置檔修改、授權建立、狀態檢查、故障排查與驗證同步的完整流程,適合運維工程師與 DBA 參考實施。

一、 架構角色與核心原理

  • Master(主庫): 處理寫操作,啟用 Binary Log(binlog)記錄所有數據變更。
  • Slave(從庫): 透過 I/O 線程拉取 Master 的 binlog 存為 Relay Log,再由 SQL 線程重放實現數據同步。
  • 核心機制: 基於 Binary Log(二進制日誌) 的非同步複制。Master 記錄事件,Slave 拉取並重放,實現最終一致性。

透過多節點冗余,可顯著提升資料庫可用性與讀取擴展性。

二、 實戰環境規劃

角色主機IP 範例Server ID
Master阿里雲 ECS117.34.73.1751
Slave1VPS 節點 A192.168.145.2262
Slave2VPS 節點 B192.168.145.2273

三、 Master 端配置(/etc/my.cnf)

[mysqld]
log-bin=mysql-bin          # 【必須】啟用二進制日誌
server-id=1                # 【必須】唯一 ID,建議取 IP 最後段
binlog-do-db=wordpress     # 【可選】只同步指定庫,未設則同步所有
binlog-ignore-db=mysql     # 【可選】忽略系統庫,避免帳號權限同步

說明: binlog-do-db 與 binlog-ignore-db 可配合使用,精確控制同步範圍。生產環境建議明確指定業務庫,避免系統表誤同步。

四、 Slave 端配置(/etc/my.cnf)

[mysqld]
log-bin=mysql-bin          # 【必須】從庫也建議開啟 binlog,利於級聯或切主
server-id=2                # 【必須】唯一 ID,不可與 Master 或其他 Slave 重複

兩台 Slave 配置同理,僅 server-id 不同。

五、 重啟服務與建立複制帳號

  1. 分別重啟 Master 與 Slave 的 MySQL 服務使配置生效。
  2. 在 Master 上建立專用複制帳號(不建議使用 root):
GRANT REPLICATION SLAVE ON *.* TO 'sync'@'%' IDENTIFIED BY 'sync_password';
FLUSH PRIVILEGES;

安全建議: 將 '%' 限制為具體 Slave IP(如 '192.168.145.226'),減少攻擊面。

六、 獲取 Master 同步坐標

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 端配置複制連線

登入 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 拉取 binlog
  • Slave_SQL_Running: Yes — SQL 線程正常重放 Relay Log

若任一為 No,需檢查 Last_IO_Error 或 Last_SQL_Error 定位故障。

九、 常見故障排查實戰

案例:Slave_IO_Running = No

錯誤提示:error connecting to master 'sync@218.244.**.**:3306' – retry-time: 60 retries: 86400

  1. 檢查帳號密碼是否正確。
  2. 檢查 Master 防火牆/安全組是否放行 3306 埠(阿里雲需在控制台配置安全組規則)。
  3. 在 Slave 主機直接用 mysql -h Master_IP -u sync -p 測試連線,排除網路不通。
  4. 若本地能連、Slave 不能連,多為雲廠商網路策略限制(如 VPC 隔離、安全組未對齊),需聯繫雲廠商或調整網路配置。

十、 驗證同步效果

在 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 主從架構,為業務高可用奠定堅實基礎。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved