一、核心优点
数据一致性提升
主库提交事务前至少等待一个从库接收Binlog并写入Relay Log,减少主库宕机导致的数据丢失风险。
AFTER SYNC模式(默认):主库先同步Binlog到从库再提交事务,一致性更强。
性能平衡
相比全同步复制,仅需等待一个从库ACK,降低延迟,适合高并发场景。
自动降级与高可用
超时或从库异常时自动切换为异步复制,避免主库阻塞,提升系统可用性。
二、主要问题
性能影响
主库需等待从库ACK,网络延迟或从库负载高时,事务提交速度下降。
超时降级风险
若所有从库长时间未响应,主库会降级为异步复制,可能导致数据不一致。
配置复杂度
需安装插件并调整参数(如超时时间、等待从库数量),生产环境需谨慎测试。
三、具体配置步骤(以主从架构为例)
1. 前提条件
主从复制已配置完成,server-id唯一,Binlog开启。
MySQL版本≥5.7,支持动态加载插件。
2. 安装插件
主库:
INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
SET GLOBAL rpl_semi_sync_master_enabled = 1;
从库:
INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
可通过SHOW PLUGINS;验证插件是否加载成功。
3. 关键参数配置(my.cnf/my.ini)
主库ini:semisync_master.dll
[mysqld]
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 5000 # 超时时间(毫秒,默认10000)
rpl_semi_sync_master_wait_for_slave_count = 1 # 等待从库数量,默认1
rpl_semi_sync_master_wait_point = AFTER_SYNC # 推荐模式:先同步再提交
从库ini:
[mysqld]
rpl_semi_sync_slave_enabled = 1
重启MySQL使配置生效。
4. 验证状态
主库:
SHOW STATUS LIKE ‘Rpl_semi_sync_master_status’; # 应显示’ON’
SHOW STATUS LIKE ‘Rpl_semi_sync_master_clients’; # 显示已连接的从库数量
从库:
SHOW STATUS LIKE ‘Rpl_semi_sync_slave_status’; # 应显示’ON’
四、注意事项
参数调优:
高延迟网络可增大rpl_semi_sync_master_timeout,避免频繁降级。
多从库场景下,rpl_semi_sync_master_wait_for_slave_count可设置为2,进一步提升数据安全性。
监控与告警:
通过SHOW GLOBAL STATUS监控Rpl_semi_sync_master_no_tx(未确认事务数),及时发现异常。
与组复制的区别:
半同步复制仅保证至少一个从库同步,而组复制(Group Replication)需所有节点确认,适用于强一致性场景
五、my-master配置文件
[mysqld]
port=3311
basedir=D:/mysql_wite_read/3311
datadir=D:/mysql_wite_read/3311/data
server-id=3311
log-bin=mysql-bin-3311
slave_net_timeout = 65
#时区配置
default-time-zone =SYSTEM
lc-messages-dir = D:/mysql_wite_read/mysql-5.7.44-winx64/share
#secure_file_priv = D:/mysql_wite_read/3311/upload
explicit_defaults_for_timestamp = ON
#慢日志配置
slow_query_log = 1
slow_query_log_file =D:/mysql_wite_read/3311/data/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_output = FILE
log_timestamps=SYSTEM
#错误日志配置
log_error = D:/mysql_wite_read/3311/data/error.log
log_error_verbosity = 3
#插件配置
plugin_dir = D:/mysql_wite_read/mysql-5.7.44-winx64/lib/plugin
#半同步配置
plugin-load = “rpl_semi_sync_master=semisync_master.dll”
rpl_semi_sync_master_enabled = 1
rpl_semi_sync_master_timeout = 5000 # 超时时间,单位毫秒,可根据网络情况调整
rpl_semi_sync_master_wait_for_slave_count = 1 # 等待从库数量,默认 1
rpl_semi_sync_master_wait_point = AFTER_SYNC # 推荐模式
六、my-slave配置文件
[mysqld]
port=3312
basedir=D:/mysql_wite_read/3312
datadir=D:/mysql_wite_read/3312/data
server-id=3312
log-bin=mysql-bin-3312
#时区配置
default-time-zone =SYSTEM
lc-messages-dir = D:/mysql_wite_read/mysql-5.7.44-winx64/share
#secure_file_priv = D:/mysql_wite_read/3311/upload
explicit_defaults_for_timestamp = ON
#慢日志配置
slow_query_log = 1
slow_query_log_file =D:/mysql_wite_read/3312/data/mysql-slow.log
long_query_time = 1
log_queries_not_using_indexes = 1
log_output = FILE
log_timestamps=SYSTEM
#错误日志配置
log_error = D:/mysql_wite_read/3312/data/error.log
log_error_verbosity = 3
#插件配置
plugin_dir = D:/mysql_wite_read/mysql-5.7.44-winx64/lib/plugin
#半同步配置
plugin-load = “rpl_semi_sync_slave=semisync_slave.dll”
rpl_semi_sync_slave_enabled = 1
七、my-master验证
C:\Users\Administrator>D:\mysql_wite_read\mysql-5.7.44-winx64\bin\mysql.exe -u root -p -h 127.0.0.1 -P 3311
Enter password: ****************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44-log MySQL Community Server (GPL)
Copyright © 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync_master_status’
-> ;
±----------------------------±------+
| Variable_name | Value |
±----------------------------±------+
| Rpl_semi_sync_master_status | ON |
±----------------------------±------+
1 row in set (0.00 sec)
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync_master_clients’;
±-----------------------------±------+
| Variable_name | Value |
±-----------------------------±------+
| Rpl_semi_sync_master_clients | 1 |
±-----------------------------±------+
1 row in set (0.00 sec)
mysql>
八、my-slave验证
C:\Users\Administrator>D:\mysql_wite_read\mysql-5.7.44-winx64\bin\mysql.exe -u root -p -h 127.0.0.1 -P 3312
Enter password: ****************
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.44-log MySQL Community Server (GPL)
Copyright © 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.
mysql> SHOW STATUS LIKE ‘Rpl_semi_sync_slave_status’;
±---------------------------±------+
| Variable_name | Value |
±---------------------------±------+
| Rpl_semi_sync_slave_status | ON |
±---------------------------±------+
1 row in set (0.00 sec)
mysql>




