全网最新最全的MySQL 8.0 半同步复制讲解

本文深入分析了MySQL的复制机制,重点介绍了半同步复制的原理、安装、配置和监控,旨在确保数据可靠性的同时降低延迟风险。通过主从库之间的事务确认策略,半同步复制在数据安全性与效率间找到平衡。
摘要由CSDN通过智能技术生成

作者公众号,欢迎一起交流。

 对于MySQL数据库来说,单机环境会存在单点故障从而有数据丢失的风险,那么MySQL数据库的主从复制是否就能保证数据的可靠呢?本篇将对MySQL的复制进行分析,并详细介绍MySQL数据库的半同步复制机制。

1 复制分析

前面介绍了MySQL数据库基于位点的主从复制和基于GTID的主从复制的环境搭建,接下来将分析下MySQL的复制方式。

1.1 复制原理

如下图所示,当在主库执行事务时,对数据的修改以事件的形式写到Binlog文件,然后主库的DUMP线程读取Binlog文件中的事件,从库的I/O线程将从主库读取的复制事件存储在Relay Log中,SQL线程读取Relay Log并将其应用于从库,从而实现主从库的一致。

 1.2 异步复制

如下图所示,MySQL数据库默认以异步复制的方式进行主从库的同步,即当主库执行事务并写到Binlog文件后,返回客户端事务执行成功,从库通过I/O线程获得主库从DUMP线程读取的Binlog内容,但主库并不知道从库是否已获得Binlog中的事务并进行处理,也就是说不能保证主库Binlog中的事件能够到达从库。如果主库发生crash,主库已提交的事务可能还没来得及传输到从库,这时进行主库到从库的Failover,就可能会发生数据的丢失。这就是异步复制的工作机制。

 1.3 全同步复制

如下图所示,相比较于异步复制会有数据丢失的风险,那么如果在主库执行的事务在所有从库应用后再返回客户端事务执行成功,由于主库执行的事务在从库都已执行,这样即使主库发生crash,主库到从库的Failover也不会发生数据的丢失,这就是全同步复制的工作机制,但是这种方式会有一个很大的缺点,那就是完成一个事务可能会有很大的延迟。

 1.4 半同步复制

如下图所示,由于异步复制可能会引起数据的丢失,而全同步复制可能会产生很大的延迟,那么半同步复制是以上两种复制的一个折中,当主库执行事务并写到Binlog文件后,主库等待至少一个从库(从库数量可配置)接收并记录Binlog事件到从库的Relaylog中,收到从库的确认后,提交事务并返回客户端事务执行成功,这就是半同步复制的工作机制,它既保证了即使主库发生crash也不会丢失数据(因为至少有一个从库获取到了主库的Binlog日志),又不会完成一个事务产生很大的延迟(因为不用等待所有从库都接收到Binlog日志并将其在从库重放)。

 2 安装半同步复制

半同步复制是通过插件来实现的,因此,安装半同步复制环境,需先在主、从库安装半同步复制插件,插件安装后,便有了相关的系统变量、状态变量对半同步环境进行配置和监控。要使用半同步复制,必须满足如下要求:

  • MySQL服务器支持动态加载插件,即变量have_dynamic_loading值为YES,默认支持
  • 主从复制环境已经运行,即在已经运行的复制环境安装半同步复制插件并进行相应的配置
  • 半同步复制只支持默认的复制通道,不能同时配置多个复制通道

实验环境若无特殊说明,MySQL数据库版本均为8.0.27

2.1 安装半同步复制插件

1)查看插件所在位置

mysql> show variables like 'plugin_dir';

+---------------+---------------
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值