一、MySQL 主从同步原理
概念 主从同步(复制)通过从一个 MySQL 主节点复制到一个或多个从节点,将数据实时同步给从节点。
优势
- 读写分离:主库负责写,从库负责读。主库故障时,从库可继续提供读取服务。
- 性能提升:读写分工提高整体工作效率。
- 数据备份:防止单点磁盘损坏导致数据丢失。
- 高可用:主节点不可用时,可从节点提升为主节点快速恢复服务。

Binlog(二进制日志)是 MySQL 服务器层面生成的逻辑日志,以二进制形式顺序记录所有对数据库的修改操作(数据或结构变更)。
三种日志格式
- Statement:记录原始 SQL 语句,可能导致更新时间与原库不一致(如
update_time=now())。 - Row:记录每行数据的变化,保证数据一致性,但数据量较大。
- Mixed:混合模式,默认采用 Statement,涉及日期、函数时采用 Row,兼顾数据量与一致性。
二、主从同步的方式
2.1 全同步
主库提交事务时,必须等待所有从库都成功写入并执行该事务后,才向客户端返回成功。
- 优点:强一致性。
- 缺点:延迟大;任一从库挂掉会导致整个系统瘫痪。
2.2 异步方式
默认模式。主库提交事务不等待从库确认,写完本地 binlog 后立即返回成功。
- 优点:主库写入速度最快;从库故障不影响主库。
- 缺点:可能数据不一致;主机宕机可能丢数据。
2.3 半同步
介于异步和全同步之间。主库提交事务时,必须等待至少一个从库接收并写入 relay log 后,才返回成功。
- 优点:一致性优于异步。
- 缺点:性能低于异步;非强一致性(只保证到达,不保证执行);主机宕机可能出现数据不一致。
2.4 增强版同步
先确保从库把数据存到磁盘,再提交主库事务(传统半同步是先提交主库事务,再等从库确认)。
- 优势:真正的零数据丢失;故障切换安全;性能损失极小。
- 代价:比异步多一次网络往返;从库故障会短暂影响写入。
2.5 组复制
多个 MySQL 服务器像一个数据库一样工作,所有节点数据实时同步,任何写入需得到多数节点同意。
Master 1 执行:A 账户 -100,B 账户 +100
↓ certify 阶段:问其他节点'可以这样改吗?'
↓ Master 2 检查:A 余额够吗?B 账户存在吗?
↓ Master 3 检查:同一时间有别的人在改这些账户吗?
↓ 都回答'可以' → Consensus 层记录'已同意'
↓ 三节点同时:写 binlog 记录这个操作
↓ 三节点同时:实际修改 A 和 B 的余额
↓ Master 1 告诉客户端:转账成功


