MySQL 异步复制、半同步复制、增强半同步复制(史上最全)

文章详细介绍了MySQL的三种复制方式:异步复制、半同步复制及其缺点,以及增强半同步复制如何解决这些问题。增强半同步复制通过等待从库确认接收,避免了幻读和数据丢失,适合金融类业务。文中还提到了与RocketMQ的刷盘和复制模式的类比,并提供了配置和测试的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:来自于小伙伴问题

小伙伴的难题:

mysql主从同步的时候,半同步和增强半同步是怎样的一个概念,我看网上说的有点不明不白的,也没找到合适的解释。

在这里插入图片描述

这里尼恩给大家做一下系统化、体系化的梳理。也一并把这个题目以及参考答案,收入咱们的 《尼恩Java面试宝典 PDF》MySQL专题,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

注:本文以 PDF 持续更新,最新尼恩 架构笔记、面试题 的PDF文件,请从下面的链接获取: 码云

目前MySQL主要有三种复制方式

1)异步复制

2)半同步复制

3)增强半同步复制

推荐使用:对性能要求较高的推荐使用异步复制 ,如果运行的金融类业务推荐使用增强半同步复制,并使用ROW+GTID+5.7以上

异步复制

MySQL复制的默认方式

说明:

如果对这个不好理解,这个就是rocketmq的 异步刷盘+异步复制

具体请参见尼恩的rocketmq 高可用视频,第17章视频

半同步复制

5bfef20d053a20f3221f93b190e17726.png

rpl_semi_sync_master_wait_point=after_commit

说明:

如果对这个不好理解,这个就是rocketmq的 同步刷盘+异步复制

具体请参见尼恩的rocketmq 高可用视频,第17章视频

半同步复制的优缺点

缺点1: 幻读

当用户发起一个事务,该事务已经写入redo日志和binlog日志,但该事务还没写入从库,此时处在waiting slave dump处,此时另一个用户可以读取到这条数据,而他自己却不能;

缺点2:数据丢失

一个事务在waiting slave dump处crash后,主库将比从库多一条数据

疑问:此时如果主从复制恢复后,该数据时候可以正常同步到从服务器?(未测试!!)

增强半同步复制

7834e199a9c2f014f7cb743da0b43fec.png

rpl_semi_rsync_master_wait_point=after_sync

改善1:解决幻读

当用户发起一个事务,该事务写入二进制后,便向从库进行同步,此时其他用户无法读取到该数据,解决了幻读

改善2:解决数据丢失

一个事务在waiting slave dump处crash掉后,可以通过观察从库上是否存在主库的last gtid值,如果存在,这条数据正常恢复,如果不存在则删除主库的那条多余的GTID值,然后恢复,保证了数据的完整性;

说明:

如果对这个不好理解,这个就是rocketmq的 同步刷盘+同步复制

具体请参见尼恩的rocketmq 高可用视频,第17章视频

部署测试

异步复制环境:一主一从

主IP:192.168.20.206

从IP:192.168.20.212

需要3个步骤:

1.给主库加载半同步复制插件,并件修改主库的my.cnf参数,;

2.给从库加载半同步复制插,并件修改从库的my.cnf参数,;

3.在从库中执行使用stop salve io_thread 、start slave io_thread命令搞定

1.1)主库加载半同步复制插件

install plugin rpl_semi_sync_master soname 'semisync_master.so';

1.2)主库开启半同步复制模式

set global rpl_semi_sync_master_enabled=1;

set global rpl_semi_sync_master_timeout=1000;

2.3)主库修改my.cnf文件

vim /etc/my.cnf

[mysqld]

###:for replcation

rpl_semi_sync_master_enabled=1

rpl_semi_sync_master_timeout=1000

2.1)从库加载半同步复制插件

install plugin rpl_semi_sync_SLAVE soname 'semisync_slave.so';

2.2)从库开启半同步复制模式

set global rpl_semi_sync_slave_enabled=1;

2.3)从库修改my.cnf文件

vim /etc/my.cnf

[mysqld]

###:for replcation

rpl_semi_sync_slave_enabled=1

3.3)在从库中执行使用stop salve io_thread 、start slave io_thread;

stop slave io_thread;

start slave io_thread;

半同步复制监控命令:

show plugins;

show global status like '%semi%';

show global variables like '%semi%';

参考文献

https://blog.youkuaiyun.com/weixin_35555531/article/details/113948452

技术自由的实现路径 PDF 获取:

实现你的 架构自由:

吃透8图1模板,人人可以做架构

10Wqps评论中台,如何架构?B站是这么做的!!!

阿里二面:千万级、亿级数据,如何性能优化? 教科书级 答案来了

峰值21WQps、亿级DAU,小游戏《羊了个羊》是怎么架构的?

100亿级订单怎么调度,来一个大厂的极品方案

2个大厂 100亿级 超大流量 红包 架构方案

… 更多架构文章,正在添加中

实现你的 响应式 自由:

响应式圣经:10W字,实现Spring响应式编程自由

这是老版本 《Flux、Mono、Reactor 实战(史上最全)

实现你的 spring cloud 自由:

Spring cloud Alibaba 学习圣经》 PDF

分库分表 Sharding-JDBC 底层原理、核心实战(史上最全)

一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之间混乱关系(史上最全)

实现你的 linux 自由:

Linux命令大全:2W多字,一次实现Linux自由

实现你的 网络 自由:

TCP协议详解 (史上最全)

网络三张表:ARP表, MAC表, 路由表,实现你的网络自由!!

实现你的 分布式锁 自由:

Redis分布式锁(图解 - 秒懂 - 史上最全)

Zookeeper 分布式锁 - 图解 - 秒懂

实现你的 王者组件 自由:

队列之王: Disruptor 原理、架构、源码 一文穿透

缓存之王:Caffeine 源码、架构、原理(史上最全,10W字 超级长文)

缓存之王:Caffeine 的使用(史上最全)

Java Agent 探针、字节码增强 ByteBuddy(史上最全)

实现你的 面试题 自由:

4000页《尼恩Java面试宝典 》 40个专题

以上尼恩 架构笔记、面试题 的PDF文件更新,请到《技术自由圈》公号获取↓↓↓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值