[缺陷分析]半同步下多从库复制异常

从零到一:基于Matlab的二阶系统时域性能指标计算与可视化实战 本文提供了一份基于Matlab的二阶系统时域性能指标计算与可视化实战指南。通过详细的代码示例,手把手教你如何利用Matlab计算超调量、调节时间等关键指标,并绘制阶跃响应曲线进行可视化分析,帮助控制工程学习者和从业者快速掌握系统性能评估方法。 阅读详情

引 言

 

本文是由爱可生研发团队出品的「图解MySQL」系列文章,不定期更新,但篇篇精品。

爱可生开源社区持续运营维护的小目标:

  • 每周至少推送一篇高质量技术文章
  • 每月研发团队发布开源组件新版
  • 每年1024开源一款企业级组件
  • 2019年至少25场社区活动

欢迎大家持续关注~

 

本文分析的缺陷是MySQL bug#89370,其主要的现象是:配置半同步(复制)到多个从库,部分从库在一段时间内无法复制数据,但所有复制状态均正常。

 

缺陷的复现

MySQL版本:5.7.16,5.7.17,5.7.21

 

  1. 配置半同步一个master两个slave,设置master的
    rpl_semi_sync_master_wait_for_slave_count=2,保持一定数据压力
  2. 检查master的
    rpl_semi_sync_master_status状态为ON,确保半同步没有退化为异步
  3. 设置master的
    rpl_semi_sync_master_wait_for_slave_count=1
  4. 重启一个slave “stop slave; start slave”

 

可以观察到步骤4中重启的那个slave长达数分钟不会有master的复制数据流入,但查看复制状态均正常。

 

缺陷的原理图解

 

图一:描述了半同步复制的大致流程

 

 

  • 上图中按序解析了MySQL半同步插件在binlog group commit中扮演的角色:

 

binlog group commit分为三个阶段:

 

  1. Flush Phase(图中序号2): 将一组事务写入binlog缓存区,向半同步插件注册事务(图中序号2.1),更新binlog文件位置信息(图中序号2.2)
  2. Sync Phase(图中序号4): 对binlog做fsync操作,将一组事务一起刷入磁盘
  3. Commit Phase(图中序号5): 等待半同步完成,在引擎层提交事务

半同步插件:

 

  1. 图中序号3:在binlog完成位置信息更新后,开始通过复制线程读取binlog文件,将其中的event发送给slave
  2. 图中序号5.1:将事务复制完成信息返回master,master根据该信息确定是否可以提交事务
  • MySQL从5.5版本后引入了半同步插件,以解决传统异步复制在master节点宕机时可能出现的数据丢失。
  • 开启半同步能够保证master接收到的事务,在得到至少一个slave接收确认之后再返回给客户端。
  • MySQL 5.6版本之前存在一个著名的bug#13669,在开启binlog时为了保证引擎层与binlog的提交顺序一致,使得group commit机制失效。从5.6版本后才真正引入了binlog的group commit,在保证引擎层和binlog事务最终一致的情况下,大幅提高了高并发场景下的处理性能。

 

图二:描述了MySQL 5.6版本中的ACK接收机制

 

  • 在MySQL 5.6版本的实现里,master的复制线程同时负责发送事务和接收slave返回的ACK消息,当没有接收到上一个事务的ACK消息之前,无法发送下一个事务。如此串行化的机制成为了半同步的性能瓶颈。

 

图三:描述了MySQL 5.7版本中的ACK接收机制

  • 在MySQL 5.7版本的实现里,将接收ACK这部分任务从master的复制线程中拆分出来,由半同步插件的ACK接收线程单独处理,使得事务发送和接收ACK得以并行,极大提高了半同步性能。

 

图四:描述了本文缺陷的发生原因

 

  • 本文所要描述的缺陷就出现在ACK接收线程中,ACK线程(图中序号1)和复制线程(图中序号2)在抢占互斥锁时产生了竞争。
  • master在监听slave的ACK消息时,无限的while循环使得ACK线程基本时刻占有互斥锁。当启动另一个slave时,master的新复制线程无法在短时间内抢占该互斥锁,导致复制线程无法启动成功,造成了slave的slave_io_thread 停滞,无法复制数据的现象。

 

扩展阅读

 

精选系列

 

| MySQL分布式中间件使用指南
DBLE系列公开课第一课 DBLE概述
DBLE系列公开课第二课 DBLE的配置及使用
MyCat的坑如何在分布式中间件DBLE上改善(内含视频链接)
| DBLE 快速入门
深度分析 | MyCat与DBLE的对比性能调优
开源分布式中间件 DBLE 快速入门指南
DBLE 自定义拆分算法
DBLE Server.xml 配置解析
DBLE Schema.xml 配置解析
DBLE rule.xml 配置解析
| MySQL深度分析
MGR相同GTID产生不同transaction故障分析
DBLE和Mycat跨分片查询结果不一致案例分析
基于Xtrabackup及可传输表空间实现多源数据恢复
[缺陷分析] Table cache 导致 MySQL 崩溃

 

开源分布式中间件DBLE
社区官网: https://opensource.actionsky.com/
GitHub主页: https://github.com/actiontech/dble
技术交流群:669663113

 

开源数据传输中间件DTLE
社区官网: https://opensource.actionsky.com/
GitHub主页: https://github.com/actiontech/dtle
技术交流群:852990221

 

 

手把手教你搞定MT6701磁编码器的SSI通信与CRC-6校验(附避坑代码) 本文详细介绍了MT6701磁编码器的SSI通信与CRC-6校验的实现方法,包括硬件连接、时序配置、数据读取和专用CRC-6算法。通过提供避坑代码和常见问题解决方案,帮助开发者快速掌握磁编芯片的调试技巧,确保通信稳定可靠。 阅读详情

相关推荐

【Godot4自学手册】第一节配置Godot运行环境

Godot是一款自由开源、由社区驱动的 2D 和 3D 游戏引擎!它是一款功能丰富的跨平台游戏引擎,可以通过统一的界面创建 2D 和 3D 游戏。它提供了一套全面的通用工具,因此用户可以专注于制作游戏,而无需重新发明轮子。游戏可以一键导出到多个平台,包括主流的桌面平台(Linux、macOS、Windows)、移动平台(Android、iOS)、基于 Web 的平台以及主机平台。

zhaoyang314的博客 5981

半同步复制中可能出现的异常情况以及应该如何应对?

文章目录半同步复制如何应对各种异常情况?一、准备知识事务提交会经历哪些阶段何为半同步复制二、可能出现哪些异常以及如何解决master 在flush binlog之前宕机master 在flush binlog 之后,send binlog之前宕机master 在send binlog之后,收到ack之前宕机 半同步复制如何应对各种异常情况? 全篇以MySQL-5.7 after_sync模式半同...

sunashe的个人随笔 1179

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

MySQL复制(二):半同步复制(Semisynchronous replicaiton)

MySQL复制有三种模式异步复制/同步复制/半同步复制,3种模式各有利弊,下面对各种复制模式的优缺点做个简要的介绍:异步复制(Asynchronous replicaton)这是MySQL默认的复制模式,异步复制指主库写binlog、从库I/O线程读binlog并写入relaylog、从库SQL线程重放事务这三步之间是异步的。异步复制的优点是主库不需要关心备库的状态,主库不保证事务被传输到从库,如果主库崩溃,某些事务可能还未发送到从库,切换后可能导致事务的丢失。其优点是可以有更高的吞吐量,缺点是不能保持数据

最简单的方法,解决最实际的问题。 4587

【STM32Cube HAL】输入捕获(六)——脉宽测量

1

HAHAHA 4906

基于CNN网络的轴承故障诊断

内容参考:《基于卷积神经网络的轴承故障 诊断算法研究》–张伟 代码参考: https://github.com/AaronCosmos/wdcnn_bearning_fault_diagnosis 1 背景: 基于信号处理的特征提取+分类器的传统智能诊断算法,对专家经验要求高,设计耗时且不能保证通用性,已经不能满足机械大数据的要求。提出使用基于卷积神经网络智能诊断算法来自动完成特征提取以及故障识别。 1.1 挑战 机电产品故障诊断面临的挑战,有三大特点: (1)数据量大,专业分析人员的数量严重不足,仅依靠人

weixin_45679938的博客 7万+

mysql半同步(semi-sync)源码实现

      mysql复制简单介绍了mysql semi-sync的出现的原因,并说明了semi-sync如何保证不丢数据。这篇文章主要侧重于semi-sync的实现,结合源码将semi-sync的实现过程展现给大家。最新的semi-sync源码可以参考官方5.7版本的实现,https://github.com/mysql/mysql-server。 打开semi-sync的正确姿势     默...

weixin_33819479的博客 162

VXWorks6.9 + Workbench3.3 开发环境部署

VxWorks6.9 + Workbench3.3的安装部署,以及简单示例项目的创建、编译和运行

Mr.Sugarcane 5452

半同步复制after_sync模式下的一则客户端断开问题分析

导读作者徐晨亮,MySQL DBA,知数堂学员。热衷于数据库优化,自动化运维及数据库周边工具开发,对MySQL源码有一定的兴趣一、背景说明众所周知,MySQL5.7对于半...

老叶茶馆 512

uniapp [安卓苹果App端] - 实现获取手机日历读写权限+调用本机日历数据及操作功能+日历中插入事项事件提醒,检测权限手机日历权限是否开启并引导用户同意授权,uniApp app端开启日历授权

uni-app,权限,手机日历权限,安卓Android,苹果ios,uniapp安卓android获取本机日历读写权限使用,uni-app获取日历权限并实现插入事项事件功能 uniapp苹果IOS系统不支持怎么办,判断权限,权限被拒绝了怎么办,获取日历权限报错,读取日历数据农历阴历并操作插入移除,给用户手机日历中放入一条提示,UniApp调用日历进行读写,打包上架后如何获取,安卓ios权限检测,安卓和ios权限获取,uniapp的APP端日历读写权限与使用示例代码,如何开启日历权限,日历的新增事项和删除,判

🏆 前端领域优质创作者 1万+

【异常】Claude Code CLI 模型调用异常 There‘s an issue with the selected model (claude-sonnet-4-6). It may not

摘要: Claude Code CLI v2.1.45版本存在适配缺陷,导致调用claude-sonnet-4-6模型时触发"模型不存在"的误报错误(跨Windows/Linux平台)。该问题为版本回归类异常,非模型或账户权限问题。解决方案包括:1) 校验模型名称格式为claude-sonnet-4-6;2) 降级至v2.1.34或等待官方修复;3) 检查API配置有效性;4) 通过CLI交互界面手动选择模型;5) 临时切换同系列可用模型。官方已确认该bug并将发布修复版本。

奶爸的编程之路,也就一周冷个三天 6373

MySQL5.7 大大降低了半同步复制-数据丢失的风险

如果你的生产线开启了半同步复制,那么对数据的一致性会要求较高,但在MySQL5.5/5.6里,会存在数据不一致的风险。有这么一个场景,客户端提交了一个事务,master把binlog发送给slave,在发送的期间,网络出现波动,此时Binlog Dump线程发送就会卡住,要等待slave把binlog写到本地的relay-log里,然后给master一个反馈,等待的时间以rpl_semi_sync...

weixin_33963594的博客 217

基于CST的PCB通孔三维建模实例

本文简明扼要地描述了如何利用CST的参数化脚本快速生成PCB的通孔三维模型,非常适合于进行快速精准的PCB参数分析。

一只豌豆象的博客 1829

图解MySQL | [缺陷分析]半同步下多从库复制异常

本文转载自[图解MySQL],原创作者:王悦,黄炎,周海鸣 ​引 言 本文是由爱可生研发团队出品的「图解MySQL」系列文章,不定期更新,但篇篇精品。 爱可生开源社区持续运营维护的小目标: 每周至少推送一篇高质量技术文章 每月研发团队发布开源组件新版 每年1024开源一款企业级组件 2019年至少25场社区活动 欢迎大家持续关注~ 本文分析的缺...

ActionTech的博客 445

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

endnote无法同步原因_[缺陷分析]半同步下多从库复制异常

引 言本文是由爱可生研发团队出品的「图解MySQL」系列文章,不定期更新,但篇篇精品。爱可生开源社区持续运营维护的小目标:每周至少推送一篇高质量技术文章每月研发团队发布开源组件新版每年1024开源一款企业级组件2019年至少25场社区活动欢迎大家持续关注~本文分析的缺陷是MySQL bug#89370,其主要的现象是:配置半同步(复制)到多个从库,部分从库在一段时间内无法复制数据,但所有复制状态...

weixin_42501892的博客 541

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

mysql多线程复制crash_MySQL 并行复制(MTS) 从库发生异常crash分析

背景半同步复制从库在晚上凌晨2点半发生异常crash,另一个异步复制从库在第二天凌晨3点也发生了异常crash。版本mysql 5.7.16redhat 6.8mysql> show variables like ‘%slave_para%’;+————————+—————+| Variable_name | Value |+————————+—————+| slave_parallel_t...

weixin_42151036的博客 310

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

MySQL 复制拓扑

小型业务、简单备份:一主一从读写分离、大量查询:一主多从上百台从库、跨机房分层:级联复制多业务分库数据汇总:多源复制追求自动故障转移、高可用:MGR 单主模式低并发双机房互备:传统双主(谨慎使用)高并发多节点写入:MGR 多主模式。

2401_88788831的博客 451

MySQL主从复制深度解析:原理、问题排查与性能优化

在MySQL数据库架构中,主从复制是实现数据备份、读写分离、负载均衡的核心技术之一。它不仅能提升系统的可用性,还能有效缓解主库的读写压力。本文将从主从复制的底层原理出发,深入剖析常见问题、复制模式演进、延迟排查与优化方案,帮助开发者和运维人员构建稳定高效的MySQL集群。

专注Java和MySQL领域知识分享 1324

腾讯云mysql高可用方案_腾讯云数据库团队:MySQL数据库的高可用性分析

作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目前采用较多的保障MySQL可用性方案。MySQL ReplicationMySQL Repl...

weixin_39618339的博客 497

数据库 流量切分_数据库多活方案

前言:当企业互联网业务到达一定规模后,往往会考虑做多数据中心。一方面可能是面临业务增长带来的挑战,单个数据中心变得难以支撑;另一方面出于对业务容灾的考量,也可能在多个城市建立数据中心达到容灾目的;还有可能本身就是全球化的业务,用户遍布在全世界各个角落,为了提升用户体验,也需要建立多数据中心。本文来一块探讨下在多数据中心间实现业务多活在数据库层有那些常见的解决方案,以及业务在应用每种方案中会遇到那些...

weixin_28323057的博客 196

MySQL高可用性分析

版权声明:本文由易固武原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/community/article/203 来源:腾云阁 https://www.qcloud.com/community   MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中。存储数据的安全性和可靠性是生产数据库的关注重点

qian_xiaoqian的博客 1648

腾讯云mysql负载均衡_腾讯云:MySQL数据库的高可用性分析

MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目前采用较多的保障MySQL可用性方案。MySQL ReplicationMySQL Replication是MySQL官方提供的主从同步方案,用于将一个MySQL实例的数据,同步到另一个实例中。Replication为保证数据安全做了重要的保证,...

weixin_26712065的博客 239

腾讯云mysql全日制分析_腾讯云:MySQL数据库的高可用性分析

MySQL数据库是目前开源应用最大的关系型数据库,有海量的应用将数据存储在MySQL数据库中。存储数据的安全性和可靠性是生产数据库的关注重点。本文分析了目前采用较多的保障MySQL可用性方案。MySQL ReplicationMySQL Replication是MySQL官方提供的主从同步方案,用于将一个MySQL实例的数据,同步到另一个实例中。Replication为保证数据安全做了重要的保证,...

weixin_29978783的博客 217

tmux MySQL

主从复制在MySQL高可用架构中的核心作用主从延迟的常见表现(如Seconds_Behind_Master值异常)延迟对业务的影响(读写不一致、备份滞后等)主从延迟的预防性监控策略(如Prometheus+AlertManager)未来趋势:基于MySQL 8.0的并行复制优化与MGR架构演进。

weixin_51425318的博客 188
上一篇: 深度分析 | MGR相同GTID产生不同transaction故障分析
下一篇: 社区征稿 | 价值3200RMB的DTCC门票免费送!
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值