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

MySQL 主從復制完整配置指南:原理、搭建步驟與故障排查

     編輯:MySQL 資料庫相關知識

核心原理

  • 單向異步復制:一主(Master)一或多從。
  • 主庫寫 Binlog,維護索引追蹤位置。
  • 從庫連接主庫,告知已讀取位置,接收增量更新,寫入 Relay Log,再重放執行。

三線程協作模型

線程位置職責
Binlog DumpMaster發送 Binlog 給從庫
I/O ThreadSlave接收 Binlog 寫入本地 Relay Log
SQL ThreadSlave讀取 Relay Log 重放執行

可用 SHOW PROCESSLIST 觀察三線程狀態。

關鍵文件說明

  • Relay Log:host_name-relay-bin.nnnnnn,格式同 Binlog,SQL Thread 執行完自動刪除。
  • Relay Log Index:host_name-relay-bin.index,追蹤當前使用的 Relay Log。
  • master.info:記錄已讀取的 Master Binlog 位置。
  • relay-log.info:記錄已執行的 Relay Log 位置。
  • 兩文件持久化存盤,重啟不丟失,勿手動修改,用 CHANGE MASTER TO 管理。

搭建步驟(基於數據快照法)

  1. 版本一致:主從安裝相同版本,建議最新穩定版。
  2. 主庫建復制賬號:
    GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%.yourdomain.com' IDENTIFIED BY 'slavepass';
    
  3. 主庫加全局讀鎖並快照:
    FLUSH TABLES WITH READ LOCK;
    -- 另開終端打包數據目錄
    tar -cvf /tmp/mysql-snapshot.tar ./data
    -- 記錄 Binlog 位置
    SHOW MASTER STATUS;
    -- 記下 File 和 Position
    UNLOCK TABLES;
    
  4. 主庫配置 my.cnf:
    [mysqld]
    log-bin
    server-id=1
    
    重啟生效。
  5. 從庫配置 my.cnf:
    [mysqld]
    server-id=2
    
    server-id 必須唯一、非 0。
  6. 部署快照數據:解壓到數據目錄,權限 chown -R mysql:mysql。
  7. 從庫指定主庫並啟動復制:
    CHANGE MASTER TO
      MASTER_HOST='master_host',
      MASTER_USER='replication',
      MASTER_PASSWORD='slavepass',
      MASTER_LOG_FILE='mysql-bin.003',
      MASTER_LOG_POS=73;
    START SLAVE;
    
  8. 驗證:SHOW SLAVE STATUS\G 關注 Slave_IO_Running、Slave_SQL_Running 均為 Yes。

常見問題排查

  • 錯誤日誌 HOSTNAME.err 記錄復制報錯。
  • 若主庫未開 --log-bin,MASTER_LOG_FILE 填 '',MASTER_LOG_POS 填 4。
  • 防火牆、網絡、賬號權限、server-id 衝突是常見阻礙。

進階提示

生產環境建議啟用 GTID(MySQL 5.6+)、半同步復制、多線程 SQL Thread(5.7+)、監控延遲告警。

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