MySQL5.5半同步复制(Semi-sync Replication)是在传统异步复制基础上提供的一种折中方案,主库在提交事务后不立即返回客户端,而是等待至少一个从库确认接收到该事务的二进制日志并写入中继日志,从而显著降低主库宕机时数据丢失的概率。它以内置插件形式提供,需要主从库分别加载对应插件并配置参数。

半同步复制与异步复制的区别
在异步复制中,主库写完二进制日志即返回成功,从库何时同步未知;半同步复制要求主库等待从库ACK。以下对比帮助理解:
| 复制方式 | 数据安全性 | 性能影响 |
|---|---|---|
| 异步复制 | 低,可能丢失已提交事务 | 最小 |
| 半同步复制 | 较高,主库宕机最多丢一个事务 | 略有增加 |
| 全同步复制 | 最高 | 明显延迟 |
主库配置步骤
主库需要安装rpl_semi_sync_master插件并开启半同步。操作如下:
-- 安装半同步主库插件 INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; -- 开启半同步并设超时时间(毫秒) SET GLOBAL rpl_semi_sync_master_enabled = 1; SET GLOBAL rpl_semi_sync_master_timeout = 1000; -- 查看状态 SHOW STATUS LIKE 'Rpl_semi_sync_master_status';
从库配置步骤
从库加载rpl_semi_sync_slave插件后启用半同步,并重启IO线程使配置生效:
-- 安装半同步从库插件 INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; -- 启用半同步 SET GLOBAL rpl_semi_sync_slave_enabled = 1; -- 重启IO线程 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; -- 确认状态 SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
配置文件持久化
为避免重启失效,可将参数写入配置文件:
[mysqld] # 主库配置 rpl_semi_sync_master_enabled=1 rpl_semi_sync_master_timeout=1000 # 从库配置 rpl_semi_sync_slave_enabled=1
常见问题说明
- 若从库全部不可用,主库在超时后会退化为异步复制,需在监控中关注
Rpl_semi_sync_master_status。 - 半同步复制不保证从库已应用事务,仅保证已接收并落盘中继日志。
- 网络延迟会直接影响主库写入响应时间,需合理设置timeout值。
半同步复制是MySQL5.5主从高可用架构中平衡性能与安全的实用方案,建议在核心业务从库上开启。
MySQL5.5semi_sync_replication主从复制修改时间:2026-07-25 21:45:22