暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL 5.7 半同步复制优缺点、配置及实操记录​

原创 毛何远 2025-08-14
313

​一、核心优点​

​数据一致性提升​
主库提交事务前至少等待一个从库接收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>

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论