Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql半同步复制

mysql半同步复制的项目实践

作者:埃泽漫笔

本文主要介绍了mysql半同步复制的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

题目详细答案

工作流程

(1)从库会在连接到主库时告诉主库,它是不是配置了半同步。

(2)如果半同步复制在主库端开启,并且至少有一个半同步复制的从库节点,那么此时主库的事务线程在提交时会被阻塞并等待,结果有两种可能:

(a)至少一个从库节点通知它已经收到了所有这个事务的Binlog事件;

(b)一直等待直到超过配置的某一个时间点为止,此时,半同步复制将自动关闭,转换为异步复制。

(3)从库节点只有在接收到某一个事务的所有 Binlog,将其写入到 Relay Log 文件之后,才会通知对应主库上面的等待线程。

(4)如果在等待过程中,等待时间已经超过了配置的超时时间,没有任何一个从节点通知当前事务,那么此时主库会自动转换为异步复制,当至少一个半同步从节点赶上来时,主库便会自动转换为半同步方式的复制。

(5)半同步复制必须是在主库和从库两端都开启时才行,如果在主库上没打开,或者在主库上开启了而在从库上没有开启,主库都会使用异步方式复制。

配置半同步复制

在主服务器上

安装半同步复制插件

INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

启用半同步复制

SET GLOBAL rpl_semi_sync_master_enabled = 1;

设置超时时间(可选)

SET GLOBAL rpl_semi_sync_master_timeout = 10000; -- 单位为毫秒

在从服务器上

安装半同步复制插件

INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

启用半同步复制

SET GLOBAL rpl_semi_sync_slave_enabled = 1;

检查半同步复制状态

在主服务器上

SHOW STATUS LIKE 'Rpl_semi_sync%';

在从服务器上

SHOW STATUS LIKE 'Rpl_semi_sync%';

MySQL 半同步复制(Semi-Sync Replication):工作流程与配置实战

半同步复制是 MySQL 中平衡数据安全性与性能的核心复制模式,它在异步复制的基础上增加了 “主库等待从库确认” 的机制,既避免了全同步的性能损耗,又降低了异步复制的数据丢失风险。本文将详细解析其工作流程、配置步骤及状态检查方法,帮助你快速落地半同步复制架构。

一、半同步复制的核心工作流程

半同步复制的核心逻辑是 “主库提交事务前,等待至少一个从库确认接收日志”,具体流程可拆解为 5 个关键步骤:

1. 初始化协商:主从确认复制模式

2. 主库事务提交与阻塞等待

3. 从库接收日志并返回确认

4. 主库复制模式的动态切换

5. 异常场景处理

二、半同步复制的配置步骤

环境准备

步骤 1:主库配置半同步

  1. 安装半同步主库插件
    半同步功能通过插件实现,需先安装:
-- 登录主库
mysql -u root -p
 
-- 安装插件(Linux 系统,Windows 为 semisync_master.dll)
INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

若提示 “Plugin already installed”,说明已安装,可跳过。

  1. 启用半同步复制
-- 临时启用(重启失效)
SET GLOBAL rpl_semi_sync_master_enabled = 1;
 
-- 永久启用(需修改 my.cnf,重启生效)
[mysqld]
rpl_semi_sync_master_enabled = 1
  1. 配置超时时间(可选)
    设置主库等待从库确认的超时时间(默认 10000 毫秒 = 10 秒):
-- 临时设置为 5 秒
SET GLOBAL rpl_semi_sync_master_timeout = 5000;
 
-- 永久设置(my.cnf)
[mysqld]
rpl_semi_sync_master_timeout = 5000

步骤 2:从库配置半同步

  1. 安装半同步从库插件
-- 登录从库
mysql -u root -p
 
-- 安装插件
INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
  1. 启用半同步复制
-- 临时启用
SET GLOBAL rpl_semi_sync_slave_enabled = 1;
 
-- 永久启用(my.cnf)
[mysqld]
rpl_semi_sync_slave_enabled = 1
  1. 重启从库 I/O 线程
    使半同步配置生效(无需重启数据库):
STOP SLAVE IO_THREAD;  -- 停止 I/O 线程
START SLAVE IO_THREAD; -- 重启 I/O 线程

三、检查半同步复制状态

配置完成后,需验证半同步是否正常工作,关键通过 SHOW STATUS 查看状态变量。

主库状态检查

SHOW STATUS LIKE 'Rpl_semi_sync%';

核心字段说明:

从库状态检查

SHOW STATUS LIKE 'Rpl_semi_sync%';

核心字段说明:

四、常见问题与注意事项

  1. 配置后仍为异步模式?
  1. 主库写入延迟增加?
    半同步会增加主库等待时间(通常 10-100ms),若延迟过大:
  1. 从库 ACK 确认不及时?
    从库接收日志慢可能是磁盘 I/O 瓶颈,建议从库使用 SSD 存储中继日志。

五、总结

半同步复制通过 “主库等待至少一个从库确认日志接收” 的机制,在性能与数据安全间取得了平衡,是生产环境核心业务的首选复制模式。其配置关键点包括:

相比异步复制,半同步以微小的性能损耗(额外 10-100ms 延迟)显著降低了数据丢失风险;相比全同步,它又避免了因等待所有从库导致的性能灾难。

到此这篇关于mysql半同步复制的项目实践的文章就介绍到这了,更多相关mysql半同步复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文