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

MySQL Master/Slave 複寫同步配置完整指南

     編輯:MySQL 資料庫相關知識

架構概覽

  • Master (A):192.168.1.2,負責寫入,開啟 Binary Log。
  • Slave (B):192.168.1.3,從 Master 讀取 Binlog 重放,實現資料同步。
  • 測試環境:Red Hat 9.0,MySQL 3.23.57(現代版本請參考 5.7+/8.0 文件,概念相同但參數名稱不同)。

Master 端配置

  1. 建立複寫專用帳號
    GRANT REPLICATION SLAVE ON *.* TO 'backup'@'192.168.1.3' IDENTIFIED BY '1234';
    FLUSH PRIVILEGES;

    僅授予 REPLICATION SLAVE 權限,遵循最小權限原則。舊版用 FILE 權限並不安全。

  2. 備份 Master 資料(冷備份)
    mysqladmin -u root -p shutdown
    tar -cvf /tmp/mysql.tar /var/lib/mysql

    必須在 MySQL 停止狀態下打包資料目錄,確保一致性。

  3. 修改 my.cnf 啟用 Binlog 並設定 Server ID
    [mysqld]
    log-bin=mysql-bin
    server-id=1
    binlog-do-db=vbb          # 僅記錄 vbb 資料庫(可省略,記錄全部)
    # sql-bin-update-same      # 舊版參數,新版已移除

    重啟 MySQL:service mysqld start。啟動後 /var/lib/mysql 會出現 mysql-bin.000001、mysql-bin.index 等檔案。

  4. 查看 Master 狀態
    SHOW MASTER STATUS;
    +------------------+----------+--------------+------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
    +------------------+----------+--------------+------------------+
    | mysql-bin.000001 |      107 | vbb          |                  |
    +------------------+----------+--------------+------------------+

    記下 File 與 Position,Slave 設定時需用到。

Slave 端配置

  1. 解壓 Master 備份檔
    cd /var/lib
    tar -xvf /tmp/mysql.tar
    chown -R mysql:mysql mysql
  2. 修改 my.cnf 設定 Slave 參數
    [mysqld]
    server-id=2
    master-host=192.168.1.2
    master-user=backup
    master-password=1234
    master-port=3306
    master-connect-retry=60
    replicate-do-db=vbb
    log-slave-updates          # 若 Slave 也需做為其他 Slave 的 Master
    # relay-log=relay-bin      # 建議明確指定 relay log 路徑

    注意:MySQL 5.6+ 建議改用 CHANGE MASTER TO 動態設定,而非寫在 my.cnf。

  3. 啟動 Slave 並啟動複寫執行緒
    service mysqld start
    mysql -u root -p
    START SLAVE;
  4. 驗證複寫狀態
    SHOW SLAVE STATUS\G
    *************************** 1. row ***************************
    Slave_IO_State: Waiting for master to send event
    Master_Host: 192.168.1.2
    Master_User: backup
    Master_Port: 3306
    Connect_Retry: 60
    Master_Log_File: mysql-bin.000001
    Read_Master_Log_Pos: 107
    Relay_Log_File: relay-bin.000002
    Relay_Log_Pos: 253
    Relay_Master_Log_File: mysql-bin.000001
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    Seconds_Behind_Master: 0

    關鍵指標:Slave_IO_Running: Yes、Slave_SQL_Running: Yes、Seconds_Behind_Master: 0 表示同步正常。

故障模擬與驗證

  1. 正常同步:Master 執行 INSERT INTO vbb.t VALUES (1);,Slave 立即可查到。
  2. Slave 斷線/宕機:Master 繼續寫入,Slave 重啟後自動從中斷點追上(依靠 master.info、relay-log.info 記錄位置)。
  3. Master 宕機:需人工介入將 Slave 提升為新 Master,或使用 MHA/Orchestrator 自動化故障轉移。

重要檔案說明

  • master.info:記錄 Master 連線資訊、Binlog 讀取位置。
  • relay-log.info:記錄 Relay Log 執行位置。
  • 若需修改 Slave 連線參數,必須先 STOP SLAVE; RESET SLAVE ALL; 並刪除上述兩檔,再重新 CHANGE MASTER TO。

現代版本(5.7+/8.0)關鍵差異

  • 使用 CHANGE MASTER TO MASTER_HOST='...', MASTER_USER='...', MASTER_PASSWORD='...', MASTER_LOG_FILE='...', MASTER_LOG_POS=...; 取代 my.cnf 靜態參數。
  • 支援 GTID (Global Transaction ID) 複寫,自動定位位置,無需手動指定 File/Position。
  • 支援 多來源複寫(Multi-Source Replication),單一 Slave 可同步多個 Master。
  • 預設啟用 binlog_format=ROW,減少非確定性語句導致的主從不一致。

安全與監控建議

  1. 複寫帳號僅授予 REPLICATION SLAVE,密碼強度高、定期輪換。
  2. 啟用 SSL 加密複寫連線:CHANGE MASTER TO MASTER_SSL=1, MASTER_SSL_CA=..., MASTER_SSL_CERT=..., MASTER_SSL_KEY=...;
  3. 監控 Seconds_Behind_Master、Slave_IO_Running、Slave_SQL_Running,異常即時告警。
  4. 定期驗證主從資料一致性(pt-table-checksum、pt-table-sync)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved