编辑
2026-04-26
Mysql数据库
00

目录

一、半同步复制
二、主库(Master)配置
三、从库(Slave)配置
四、半同步复制状态验证(必须全部通过,才算部署成功)

一、半同步复制

部署前必须满足的前提条件

  1. 半同步复制必须基于已经正常运行的异步主从复制搭建,先确认以下条件全部满足:
  2. 主库、从库 MySQL 版本一致(推荐 5.7.20+/8.0.20+,半同步稳定性最佳)
  3. 主库、从库网络互通,3306 端口双向放通
  4. 主库、从库server_id全局唯一,不重复
  5. 主库已开启 binlog,格式为ROW(生产标准)
  6. 异步主从复制已正常运行:Slave_IO_Running和Slave_SQL_Running均为Yes,主从无延迟

二、主库(Master)配置

修改 MySQL 配置文件my.cnf(Linux 默认路径/etc/my.cnf,Windows 为my.ini) 在[mysqld]段下添加 / 修改以下配置,永久生效,重启 MySQL 不丢失:

ini
[mysqld] # ========== 主从基础配置(已配置可跳过) ========== server_id = 1 # 全局唯一,从库不能和这个重复 log_bin = mysql-bin binlog_format = ROW # 生产强制ROW模式,半同步数据一致性最佳 binlog_do_db = 你的业务库名 # 要同步的库,不写默认同步所有库 binlog_ignore_db = mysql binlog_ignore_db = information_schema binlog_ignore_db = performance_schema # ========== 半同步核心配置 ========== # 加载半同步主库插件 plugin_load_add = semisync_master.so # 开启半同步复制 rpl_semi_sync_master_enabled = 1 # 半同步超时时间:1000ms=1秒,超时自动降级为异步复制,不阻塞业务 rpl_semi_sync_master_timeout = 1000 # 至少等待1个从库ACK确认,才提交事务 rpl_semi_sync_master_wait_for_slave_count = 1 # 事务提交时机:after_sync(MySQL5.7+默认,最安全,主库宕机不丢数据) rpl_semi_sync_master_wait_point = AFTER_SYNC

重启主库 MySQL 服务,使配置生效

js
systemctl restart mysqld

登录主库 MySQL,确认插件加载成功、半同步开启

sql
-- 确认插件已激活 SHOW PLUGINS LIKE 'rpl_semi_sync_master'; -- 确认半同步参数已生效 SHOW VARIABLES LIKE 'rpl_semi_sync%';

三、从库(Slave)配置

修改 MySQL 配置文件my.cnf 在[mysqld]段下添加 / 修改以下配置,永久生效:

ini
[mysqld] # ========== 主从基础配置(已配置可跳过) ========== server_id = 2 # 必须和主库、其他从库不一样,全局唯一 relay_log = mysql-relay-bin read_only = 1 # 普通用户只读,超级用户除外,防止误写入 replicate_do_db = 你的业务库名 # 和主库保持一致 replicate_ignore_db = mysql replicate_ignore_db = information_schema replicate_ignore_db = performance_schema # ========== 半同步核心配置 ========== # 加载半同步从库插件 plugin_load_add = semisync_slave.so # 开启从库半同步 rpl_semi_sync_slave_enabled = 1

重启从库 MySQL 服务,使配置生效

js
systemctl restart mysqld

登录从库 MySQL,确认插件加载成功,重启 IO 线程激活半同步

sql
-- 确认插件已激活 SHOW PLUGINS LIKE 'rpl_semi_sync_slave'; -- 确认半同步参数已生效 SHOW VARIABLES LIKE 'rpl_semi_sync%'; -- 【关键步骤】重启从库IO线程,激活半同步复制 STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

四、半同步复制状态验证(必须全部通过,才算部署成功)

主库执行:确认半同步运行状态

sql
-- 核心:Rpl_semi_sync_master_status 必须为 ON SHOW STATUS LIKE 'Rpl_semi_sync_master_status'; -- 查看半同步ACK确认次数,有数值代表从库正常返回ACK,半同步正常工作 SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx'; -- 查看超时降级为异步的事务数,正常应该为0或极少 SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';

从库执行:确认从库半同步状态

sql
-- 核心:Rpl_semi_sync_slave_status 必须为 ON SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';

最终业务验证

在主库写入一条测试数据,确认从库能正常同步,同时主库Rpl_semi_sync_master_yes_tx数值增加,代表半同步正常工作。

本文作者:松轩(^U^)

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!