rpl_semi_sync_master_status为off的根本原因是插件未加载、主从未通或网络不稳定三者缺一;必须在主从库分别安装对应插件、启用配置、重启i/o线程,并验证rpl_semi_sync_master_clients≥1且双方状态均为on。

MySQL 半同步复制不是开个开关就能用的,它依赖插件、主从已通、网络稳定三件事同时成立;缺一不可,否则 Rpl_semi_sync_master_status 永远是 OFF。
怎么确认半同步插件已正确加载
插件没装上,后面所有配置都白搭。必须在主库和从库分别执行安装命令,并验证是否出现在插件列表里。
- 主库执行:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'; - 从库执行:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'; - 统一验证:运行
SHOW PLUGINS LIKE '%semi%';,输出中应有两行,Status列为ACTIVE - 常见错误:
ERROR 1126 (HY000): Can't open shared library 'semisync_master.so'—— 说明插件文件不在plugin_dir目录下,先查路径:SELECT @@plugin_dir;,再把.so文件拷过去
为什么 my.cnf 配置生效后状态还是 OFF
配置文件写对了,但没重启服务或没动态启用,Rpl_semi_sync_master_status 就不会变 ON。
- 主库必须设:
rpl_semi_sync_master_enabled = 1(配置文件)+SET GLOBAL rpl_semi_sync_master_enabled = 1;(运行时) - 从库同理:
rpl_semi_sync_slave_enabled = 1+SET GLOBAL rpl_semi_sync_slave_enabled = 1; - 最关键一步:从库要重启 I/O 线程,否则插件不参与复制流程 ——
STOP SLAVE IO_THREAD; START SLAVE IO_THREAD; - 别漏掉超时参数:
rpl_semi_sync_master_timeout = 10000(单位毫秒),太小容易频繁退化为异步
如何验证半同步真的在工作
不能只看变量,得看实时状态和连接反馈,否则可能“看起来开了,实际没走半同步路径”。
- 主库查状态:
SHOW STATUS LIKE 'Rpl_semi_sync_master_status';→ 必须返回ON - 主库查连接数:
SHOW STATUS LIKE 'Rpl_semi_sync_master_clients';→ 至少为1,否则说明从库没成功注册为半同步节点 - 从库查状态:
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';→ 必须为ON,且SHOW SLAVE STATUS\G中Slave_IO_Running: Yes - 模拟故障测试:临时停掉从库 MySQL,主库事务会卡住约
rpl_semi_sync_master_timeout毫秒,然后自动降级为异步(Rpl_semi_sync_master_status变OFF),恢复从库后会自动切回
最容易被忽略的是从库的 IO_THREAD 重启动作和主库的 Rpl_semi_sync_master_clients 实际值 —— 很多人配完以为好了,结果主库根本没收到从库的半同步注册请求,整个流程就卡在第一步。











