启用半同步复制需MySQL 5.7+、主从正常运行并安装半同步插件,主库启用rpl_semi_sync_master,从库启用rpl_semi_sync_slave,配置my.cnf持久化设置,重启IO线程生效,验证Rpl_semi_sync_master_status为ON表示成功,事务提交需至少一个从库写入relay log才确认,超时自动降级异步,适合高一致性场景。

在MySQL中使用半同步复制(Semi-Synchronous Replication)可以有效提升数据安全性,确保主库提交的事务至少被一个从库接收并写入relay log后才确认成功。相比异步复制,它减少了主库宕机时数据丢失的风险,同时性能开销相对较小。
启用半同步复制的前提条件
要使用半同步复制,需满足以下基本要求:
- MySQL版本 >= 5.7(推荐8.0以上)
- 主从复制已正常配置并运行
- 主从节点都安装了半同步插件
安装和启用半同步插件
半同步功能由插件实现,主从节点都需要加载对应插件。
在主库上执行:INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
在从库上执行:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
插件安装后会自动持久化,重启不会丢失。
配置my.cnf参数
建议在配置文件中添加以下参数,避免重启后失效。
主库配置(my.cnf):
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 10000 # 超时时间,单位毫秒(默认10秒)
从库配置(my.cnf):
[mysqld]
rpl_semi_sync_slave_enabled = 1
修改配置后需重启从库或重启IO线程生效:
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;
验证半同步状态
检查主库是否成功启用半同步:
SHOW STATUS LIKE 'Rpl_semi_sync_master_status';
返回值为 ON 表示已启用且有从库连接成功。
查看从库状态:
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
还可以查看主库有多少个从库处于半同步状态:
SHOW STATUS LIKE 'Rpl_semi_sync_master_clients';
工作原理与注意事项
主库提交事务时流程如下:
- 事务写入binlog并发送给从库
- 等待至少一个从库返回“已写入relay log”确认
- 收到确认后,主库提交事务并返回客户端
- 若超时未收到确认,自动退化为异步复制
注意:半同步只保证“接收到并写入relay log”,不保证执行。如果从库延迟高或网络不稳定,可能频繁超时降级。
可通过调整 rpl_semi_sync_master_timeout 平衡安全与性能。设置为0表示永不超时(不推荐生产环境使用)。
基本上就这些。启用后建议持续监控 Rpl_semi_sync_master_no_times 和 no_tx 等状态变量,了解降级频率。半同步是提高数据安全的有效手段,适合对一致性要求较高的场景。










