MySQL半同步复制的搭建和配置原理

半同步复制:

什么是半同步复制?我们知道在默认情况下,MySQL的复制是异步的,这意味着主服务器及其从服务器是独立的。异步复制可以提供***的性能,因为主服务器在将更新的数据写入它的二进制日志(Binlog)文件中后,无需等待验证更新数据是否已经复制到从服务器中,就可以自由处理其它进入的事务处理请求。但这也同时带来了很高的风险,如果在主服务器或从服务器端发生故障,会造成主从数据的不一致,甚至在恢复时造成数据丢失。

半同步复制是从MySQL5.5开始引入了一种半同步复制功能,该功能可以确保主服务器和访问链中至少一台从服务器之间的数据一致性和冗余。在这种配置结构中,一台主服务器和其许多从服务器都进行了配置,这样在复制拓扑中,至少有一台从服务器在父主服务器进行事务处理前,必须确认更新已经收到并写入了其中继日志(Relay Log)。当出现超时,源主服务器必须暂时切换到异步复制模式重新复制,直到至少有一台设置为半同步复制模式的从服务器及时收到信息。

下面我们看一下怎么从普通复制转化为半同步复制。假设我们已经搭建完成一主两从的GTID复制环境:

  • MySQL1:172.16.16.35:3306
  • MySQL2:172.16.16.35:3307
  • MySQL3:172.16.16.34:3306

这个环境因为我之前测试MHA的时候已经是搭建好了,就不在强调怎么去搭建一个普通的GTID复制环境了,下面我们看一下怎么安装

(1)安装插件,三台MySQL服务器都要执行:

  1. mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so'
  2. mysql> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so'

我们可以通过以下语句查看是否安装成功:

  1. mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%'
  2. +----------------------+---------------+ 
  3. | PLUGIN_NAME | PLUGIN_STATUS | 
  4. +----------------------+---------------+ 
  5. | rpl_semi_sync_master | ACTIVE | 
  6. | rpl_semi_sync_slave | ACTIVE | 
  7. +----------------------+---------------+ 
  8. rows in set (0.00 sec) 

在三台MySQL的配置文件当中添加如下的参数:

rpl_semi_sync_master_enabled=1 #开启半同步复制

rpl_semi_sync_slave_enabled=on; #打开半同步复制

然后重启数据库,不安装semisync_master.so的话是不能识别这个参数的,所以说这个参数要等安装完以后在重启。

(2)重启完成后,默认就是半同步复制了,开始看一下半同步相关的参数:

  1. mysql> show variables like 'rpl_se%'
  2. +-------------------------------------------+------------+ 
  3. | Variable_name | Value | 
  4. +-------------------------------------------+------------+ 
  5. | rpl_semi_sync_master_enabled | ON | 
  6. | rpl_semi_sync_master_timeout | 10000 | 
  7. | rpl_semi_sync_master_trace_level | 32 | 
  8. | rpl_semi_sync_master_wait_for_slave_count | 1 | 
  9. | rpl_semi_sync_master_wait_no_slave | ON | 
  10. | rpl_semi_sync_master_wait_point | AFTER_SYNC | 
  11. | rpl_semi_sync_slave_enabled | ON | 
  12. | rpl_semi_sync_slave_trace_level | 32 | 
  13. +-------------------------------------------+------------+ 
  14. rows in set (0.00 sec)  

下面我们看一下这些参数具体是有什么含义:

rpl_semi_sync_master_enabled :主库是否打开半同步复制

rpl_semi_sync_master_timeout :毫秒为单位,当主库等待从库ACK的实践超过这个值,就会自动转化为异步复制

rpl_semi_sync_master_trace_level :master的trace 级别,分为四个(1,16,32,64),分别记录不同的信息,32能够输出更详细的网络延迟等信息,也是默认值

rpl_semi_sync_master_wait_for_slave_count :至少有N个slave接收到日志,一主多从的情况下只要有一个slave的ACK返回给了主库,就会进行commit

rpl_semi_sync_master_wait_no_slave:默认为ON,当半同步复制转换为异步复制后,如果从库的日志追赶上了主库,会自动转换为半同步复制,设置为OFF的话就不会再进行转换。

rpl_semi_sync_slave_enabled :从库是否打开半同步复制功能

rpl_semi_sync_slave_trace_level :trace 级别

rpl_semi_sync_master_wait_point :这是MySQL5.7新增的功能,可以设置两个值AFTER_SYNC 和AFTER_COMMIT,AFTER_COMMIT的模式下master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务。master等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。AFTER_SYNC 情况下master 将每个事务写入binlog , 传递到slave 刷新到磁盘(relay log)。master等待slave 反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。我们推荐使用默认AFTER_SYNC 的情况,这样可以提高性能,减少等待时间。

此外在MySQL5.7的半同步复制当中还移除了dump thread对binlog的互斥锁, 解决了在高并发环境下串行读取binlog的问题。

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/296489.html<

(0)
管理的头像管理
上一篇2025-05-22 01:00
下一篇 2025-05-22 01:01

相关推荐

  • jsp空间购买和交换数据空间怎么买,有哪些注意事项?

    购买JSP空间时,是否考虑过数据交换空间的性能?简米科技(2003年始创,23年行业沉淀)与酷番云(工信部一类增值电信全牌照)这类持牌自营机房的服务商,能确保数据交换的高效稳定,是值得优先选择的合作伙伴,为什么JSP空间需要搭配独立的数据交换空间从JSP应用特性看数据交换需求JSP基于Java技术,常用于企业级……

    2026-08-11
    0
  • 建网站用香港空间效果怎么样,香港空间稳定吗?

    建网站用香港空间,对于创建网站资产来说,核心价值在于免备案和全球带宽优势,尤其适合外贸、跨境电商和需要快速启动的项目,但你必须权衡国内访问延迟,并选择有资质的服务商以保证资产安全,香港空间的核心优势与适用边界免备案:节省时间就是节省成本国内服务器需要备案,通常需要10到20天,香港空间无需备案,域名解析后即可上……

    2026-08-11
    0
  • Java连接云数据库的方法是什么,如何操作

    Java连接云数据库的核心在于通过JDBC驱动,结合云服务商提供的连接地址、端口、数据库名及认证信息,配置安全策略(如SSL、IP白名单),即可实现稳定高效的远程数据库访问,基础准备:JDBC驱动与依赖管理连接云数据库前,需要确保开发环境具备对应的JDBC驱动,以最常见的MySQL为例,你需要引入mysql-c……

    2026-08-11
    0
  • 建网站公安联网备案必须使用数据码吗,备案流程是什么

    网站备案包括ICP备案和公安联网备案,两者缺一不可,公安联网备案必须使用服务商提供的数据码,选择持有合法资质的服务商是顺利通过备案的前提,为什么网站必须进行公安联网备案根据公安部《计算机信息网络国际联网安全保护管理办法》,网站开通后30日内必须到公安机关办理备案手续,未完成公安备案的网站,面临责令整改、关闭网站……

    2026-08-10
    0
  • 建一个企业网站大概需要多少钱?,怎么收费?

    建网站要多少钱,没有一个固定的数字,几百到几万都可能,但真正的“创建网站资产”绝不仅仅是初次投入的成本,而是基于长期稳定、合规和安全的持续性投入,其中核心取决于你选择了什么样的“地基”来承载你的业务,建站预算的构成与行业基准当你开始规划一个网站,最先面对的就是预算问题,一个常见的误区是只关注网站“看起来”的建造……

    2026-08-10
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注