首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 主從複製架構詳解:原理、配置步驟與 binlog 格式選型指南

     編輯:MySQL 綜合教學

核心原理

MySQL 主從複製基於 二進制日志,三線程協作:

  1. Master Binlog Dump Thread:將 binlog 事件發送給 Slave。
  2. Slave I/O Thread:連接 Master,請求 binlog,寫入本地 Relay Log。
  3. Slave SQL Thread:讀取 Relay Log,重放 SQL,保持數據一致。

主從架構圖

binlog 格式選型:ROW vs STATEMENT vs MIXED

格式記錄內容優點缺點適用場景
STATEMENTSQL 語句原文binlog 體積小非確定性函數(NOW、UUID)導致主從不一致簡單確定性 SQL 為主
ROW行級變更(每行前後值)絕對一致性,無歧義大批量更新 binlog 膨脹數據一致性要求極高、複雜 SQL
MIXED自動切換折中不可控不確定場景,建議顯式指定 ROW

生產建議:binlog_format=ROW + binlog_row_image=MINIMAL(僅記錄變更列)。

配置步驟(一主一從)

1. Master 配置

[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
binlog_row_image=MINIMAL
gtid_mode=ON
enforce_gtid_consistency=ON

重啟後創建複製帳號:

CREATE USER 'repl'@'%' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
FLUSH PRIVILEGES;

2. Slave 配置

[mysqld]
server-id=2
relay-log=relay-bin
read-only=ON  # 防止誤寫入
gtid_mode=ON
enforce_gtid_consistency=ON

3. 建立複製關聯

-- 在 Slave 執行
CHANGE MASTER TO
  MASTER_HOST='192.168.1.100',
  MASTER_USER='repl',
  MASTER_PASSWORD='strong_password',
  MASTER_AUTO_POSITION=1;  -- GTID 模式無需指定文件/位置

START SLAVE;

4. 驗證狀態

SHOW SLAVE STATUS\G
-- 關鍵指標
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0

Slave 狀態

進階:讀寫分離與高可用

  • 讀寫分離:中間件(ProxySQL、MyCat、ShardingSphere)路由 SELECT 至 Slave。
  • 高可用 (MHA/Orchestrator/InnoDB Cluster):Master 故障自動提升 Slave 為新 Master。
  • 延遲監控:Seconds_Behind_Master、SHOW SLAVE STATUS 定時告警。

常見故障排查

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象可能原因處理
IO_Running=No網絡/權限/防火牆/MASTER_HOST 錯誤檢查連通性、帳號權限、錯誤日誌
SQL_Running=No主鍵衝突/外鍵約束/非確定性 SQL跳過錯誤 SET GLOBAL sql_slave_skip_counter=1 或修正數據
延遲大Slave 機能弱/大事務/長 SQL/鎖爭用升級硬件、拆分大事務、優化慢 SQL、並行複製