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

MySQL 主從複製深度解析:異步/半同步機制、SBR/RBR/MBR 格式、配置全流程、監控指標

     編輯:MySQL 資料庫相關知識

MySQL 複制是高可用、讀寫分離、異地災備的基石。本文系統梳理異步/半同步複制機制、三種 binlog 格式(SBR/RBR/MBR)優劣對比、主從配置標準化流程、關鍵監控指標、常見故障排查。

一、複制核心機制

  • 異步複制(預設): 主庫提交後不等待從庫確認,效能最佳,主庫故障可能丟失未同步事務。
  • 半同步複制(5.5+): 主庫提交後等待至少一個從庫確認收到並寫入 Relay Log(非必須執行),再返回客戶端。rpl_semi_sync_master=1, rpl_semi_sync_slave=1。
  • 全同步複制: MySQL Cluster (NDB) / Group Replication (5.7+),非傳統主從架構。

二、Binlog 格式深度對比

維度STATEMENT (SBR)ROW (RBR)MIXED (MBR)
記錄內容SQL 語句文本行變更前後映像一般語句用 SBR,非確定性用 RBR
體積小大(批量更新極大)中等
非確定性函數不安全 (NOW, UUID, RAND)安全自動切換 RBR
主鍵/唯一鍵衝突可能導致從庫報錯精確檢測衝突安全
從庫回放效能需重新解析/優化/執行直接應用行變更,快視實際格式
審計/審計可讀 SQL,適合審計二進制,需 mysqlbinlog 解析—
跨版本複制語法差異風險行格式穩定,相容性好推薦

建議: 生產環境預設 binlog_format = MIXED;純 OLTP 高併發可設 ROW 配合 binlog_row_image = MINIMAL 減小體積。

三、主從配置標準化流程

1. 主庫配置

[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = MIXED
expire_logs_days = 7
max_binlog_size = 1G
gtid_mode = ON
enforce_gtid_consistency = ON
# 半同步
rpl_semi_sync_master = 1
rpl_semi_sync_master_timeout = 1000  # ms
# 可選:只複製特定庫
# binlog_do_db = biz_db
# binlog_ignore_db = test,sys

2. 從庫配置

[mysqld]
server-id = 2
relay_log = relay-bin
log_slave_updates = 1  # 級聯複制必開
read_only = 1
gtid_mode = ON
enforce_gtid_consistency = ON
# 半同步
rpl_semi_sync_slave = 1

3. 建立複制帳號並啟動

-- 主庫
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'strong_pwd';
FLUSH PRIVILEGES;

-- 從庫 (GTID 模式簡化)
CHANGE MASTER TO
  MASTER_HOST='master_ip',
  MASTER_USER='repl',
  MASTER_PASSWORD='strong_pwd',
  MASTER_AUTO_POSITION = 1;  -- GTID 自動定位
START SLAVE;

四、關鍵監控指標

指標命令健康標準異常含義
IO 線程狀態SHOW SLAVE STATUS\G → Slave_IO_RunningYesNo = 網路/認證/主庫 binlog 損壞
SQL 線程狀態Slave_SQL_RunningYesNo = 回放報錯 (鍵衝突/結構差異/函數不存在)
延遲秒數Seconds_Behind_Master0 或極小大 = 從庫執行慢/主庫寫入快/網路延遲
Relay Log 空間Relay_Log_Space穩定持續增長 = SQL 線程阻塞
主庫 Binlog 位置SHOW MASTER STATUS—對比從庫 Master_Log_File/Pos 判斷進度

五、常見故障與排查

  1. SQL 線程報錯 1062 (Duplicate entry): 從庫已有數據/主鍵衝突 → SET GLOBAL sql_slave_skip_counter = 1; START SLAVE;(謹慎使用)或重新搭建從庫。
  2. IO 線程連不上: 檢查防火牆、bind-address、帳號密碼、MASTER_HOST 解析。
  3. 延遲飆升: 從庫長事務/大表 DDL/鎖等待/硬體瓶頸 → SHOW PROCESSLIST 分析、考慮並行複制 slave_parallel_workers (5.6+)。
  4. Relay Log 損壞: STOP SLAVE; CHANGE MASTER TO MASTER_LOG_FILE=..., MASTER_LOG_POS=...; START SLAVE; 重新同步。

六、總結

MySQL 複制以 binlog 為核心,支援異步/半同步/GTID 多種模式。生產環境建議:ROW/MIXED 格式 + GTID 自動定位 + 半同步複制 + 並行回放 + 監控告警。標準化配置、定期演練故障切換、備份驗證,是保障數據高可用的鐵三角。

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