必须先安装半同步复制插件,仅修改配置参数无效;主库执行INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so',从库执行INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so',再通过SHOW STATUS LIKE 'Rpl_semi_sync%'确认Rpl_semi_sync_master_status为ON才算真正启用。

半同步复制必须先装插件,不装插件直接改参数没用
MySQL 半同步复制不是靠配置项开关就能启用的,rpl_semi_sync_master_enabled 和 rpl_semi_sync_slave_enabled 这两个变量默认是 OFF,但更关键的是:它们依赖插件。没装插件时,即使你 SET GLOBAL 开启了,变量也会立刻回退为 OFF,且错误日志里会报 Unknown variable 或插件未加载。
实操建议:
- 主库执行:
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'(Linux)或'semisync_master.dll'(Windows) - 从库执行:
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so' - 确认是否成功:
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';,状态必须是ACTIVE - 插件名后缀和路径取决于 MySQL 版本和编译方式;5.7+ 通常自带,8.0 默认不加载,需手动 INSTALL
my.cnf 里只配开关和超时,别碰插件路径
插件加载必须用 INSTALL PLUGIN 命令,my.cnf 里不能写 plugin_load 来加载半同步插件——这是常见误区。MySQL 8.0 起 plugin_load 已废弃,且半同步插件不支持通过该参数自动加载。
my.cnf 中只需配这些:
- 主库段加:
rpl_semi_sync_master_enabled = ON、rpl_semi_sync_master_timeout = 10000(单位毫秒,超时后自动降级为异步) - 从库段加:
rpl_semi_sync_slave_enabled = ON - 重启 MySQL 后,仍需在 SQL 里执行
SET GLOBAL开关(因为 my.cnf 配置只在启动时读取,而插件已加载后变量才可设) -
rpl_semi_sync_master_timeout设太小(如 100)会导致网络抖动时频繁降级;设太大(如 60000)会让主库卡住太久,影响业务
SHOW STATUS 里看 Rpl_semi_sync_master_status 才算真启用
别只信 SELECT @@rpl_semi_sync_master_enabled 返回 ON。这个变量只是“你想开”,真正有没有生效,得看运行时状态。主库上执行 SHOW STATUS LIKE 'Rpl_semi_sync%';,重点盯两个值:
-
Rpl_semi_sync_master_status:ON 表示当前处于半同步模式;OFF 表示已降级为异步(比如从库挂了、网络断了、超时了) -
Rpl_semi_sync_master_clients:显示当前有多少个从库成功注册为半同步客户端(注意:不是所有 START SLAVE 的从库都会算进来,必须也装了插件 + 开了rpl_semi_sync_slave_enabled) - 如果
Rpl_semi_sync_master_status是 OFF,但插件和变量都 OK,大概率是主从之间没完成“半同步握手”——检查从库是否执行过STOP SLAVE; START SLAVE;(加载插件后需要重连)
MySQL 5.7 和 8.0 的插件名与兼容性差异
不同版本的插件文件名和默认行为有差别,混用会导致加载失败或功能异常:
- MySQL 5.7:插件名是
semisync_master.so/semisync_slave.so;支持plugin_load(但不推荐) - MySQL 8.0.2+:插件名改为
semisync_master.so/semisync_slave.so(名字没变),但plugin_load已移除;必须用INSTALL PLUGIN;且 8.0.26+ 要求从库开启replica_parallel_workers > 0时,半同步才支持并行复制 - 主库 5.7 + 从库 8.0 可以共存,但要注意:8.0 从库的插件必须匹配其自身版本,不能复用 5.7 的 so 文件
- 升级 MySQL 后,插件不会自动重装,必须人工补
INSTALL PLUGIN,否则半同步静默失效
STOP SLAVE; START SLAVE;,状态就永远卡在异步。










