复制、GTID 与高可用
概览 MySQL 复制、GTID、半同步与 MGR/InnoDB Cluster 基本知识与实践要点。
Binlog 与格式
- Binlog 格式:
ROW
(推荐)、STATEMENT
、MIXED
;ROW 精确但体积较大。 - 关键参数:
server_id
、binlog_format
、log_bin
、gtid_mode
、enforce_gtid_consistency
。
基础复制
- 传统基于坐标:
CHANGE MASTER TO MASTER_LOG_FILE=..., MASTER_LOG_POS=...;
- 基于 GTID:
CHANGE MASTER TO MASTER_AUTO_POSITION=1;
更易切换与容灾。 - 监控延迟:
Seconds_Behind_Master
(8.0 后为Replica
术语)。
半同步复制
- 主库提交需等待至少一台从库确认写入 RelayLog;降低数据丢失风险,增加延迟。
Group Replication / InnoDB Cluster
- 强一致复制组(Paxos/Raft 类),冲突检测与自动故障转移。
- 读写分离、高可用拓扑,配合 Router 使用。
常见问题
- 复制延迟:大事务、IO/CPU 瓶颈;拆小事务、提升硬件、调参。
- 主从不一致:过滤规则错误、非确定性函数;优先 ROW 并规避不确定性写法。
- 崩溃恢复与 Crash-Safe 复制:
relay_log_recovery=ON
。
排查命令
SHOW MASTER STATUS; -- 主库位点/GTID
SHOW SLAVE STATUS\G; -- 复制状态(8.0: SHOW REPLICA STATUS\G)