摘要:当前MySQL所有版本不支持分布式事务的崩溃恢复安全,这严重影响了分布式事务的高可用保障。

华为云数据库内核高级技术专家,拥有十多年MySQL内核研发经验,目前在华为云数据库团队研发华为云数据库(RDS for MySQL和GaussDB(for MySQL))内核特性和服务化特性,修复华为云数据库现网问题;曾在官方MySQL团队研发MySQL内核特性和修复MySQL内核问题九年多,尤其擅长MySQL Replication。

注:本文如没有特殊说明,MySQL指社区版MySQL;binlog指MySQL server日志;redo Log指MySQL InnoDB日志

MySQL replication实时同步主库上执行的事务到备库,并且支持一般事务的崩溃恢复安全,这为一般事务的高可用提供了坚实的保障。如果没有此高可用保障,主库崩溃(不能正常恢复场景)后,数据库服务轻则中断几十分钟甚至几小时,重则丢失用户数据。

但是当前MySQL所有版本不支持分布式事务的崩溃恢复安全,这严重影响了分布式事务的高可用保障。华为云数据库(包括RDS (for MySQL) 和GaussDB (for MySQL))解决了这一痛点,支持分布式事务的崩溃恢复安全,极大地提升华为云数据库的可靠性和可用性。

接下来我们将逐个讨论MySQL在分布式事务崩溃恢复安全方面的几个常见问题,以及华为云数据库采取了什么解决方案来保证数据的一致性。

(如需了解分布式事务,请参考这里:https://dev.mysql.com/doc/refman/8.0/en/xa.html)

问题一:

如上图所示:如果崩溃发生在危险区间段内的任意一点,主库重启后,binlog中保存有准备阶段执行的事务,但是InnoDB回滚了准备阶段执行的事务。从而导致MySQL server和InnoDB数据不一致。准备阶段执行的事务会被回放到备库,它获得的所有事务处理过程中使用的锁永远不能被释放。最终导致备库回放需要获得相关锁的其它事务时锁超时失败,复制中断。

华为云数据库解决方案

如上图流程所示:

  1. 如果崩溃发生在阶段一,主库重启后,这个分布式事务准备阶段既不在MySQL server中,也不在InnoDB中;
  2. 如果崩溃发生在阶段二,主库重启恢复过程中这个分布式事务准备阶段会被InnoDB回滚掉,最终这个分布式事务准备阶段既不在MySQL server中,也不在 InnoDB;
  3. 如果崩溃发生在阶段三,主库重启后,这个分布式事务准备阶段既存在MySQL server中,也存在InnoDB中;

所以,无论崩溃发生在上图中的哪一点,主库重启后,华为云数据库都能保证MySQL server和InnoDB数据的一致性。

问题二:

如上图所示:如果崩溃发生在危险区间段内的任意一点,主库重启后,binlog保存有XA COMMIT xid, 但是MySQL InnoDB没有提交这个分布式事务。

  • 如果不重新提交,那么在准备阶段获得的所有事务处理过程中使用的锁永远不能被释放,最终导致主库执行需要获得相关锁的其它事务时锁超时失败;
  • 如果重新提交,XA COMMIT xid再次被持久化到binlog,备库在回放第二个XA COMMIT xid时抛出“Unknown XID”错误,导致复制中断。

华为云数据库解决方案

主库在重启的过程中以binlog作为仲裁提交了这个分布式事务准备阶段执行的事务,保证了华为云数据库MySQL server和MySQL InnoDB数据的一致性。

问题三:

如上图所示:如果崩溃发生在危险区间段内的任意一点,主库重启后, binlog保存有XA ROLLBACK xid,但是MySQL InnoDB没有回滚这个分布式事务。

  • 如果不重新回滚,这个分布式事务准备阶段获得的所有事务处理过程中使用的锁永远不能被释放,最终导致主库执行需要获得相关锁的其它事务时锁超时失败;
  • 如果重新回滚,XA ROLLBACK xid再次被持久化到binlog,备库在回放第二个XA ROLLBACK xid时抛出“Unknown XID”错误,导致复制中断。

华为云数据库解决方案

主库在重启的过程中以binlog作为仲裁回滚了这个分布式事务准备阶段执行的事务,保证了华为云数据库MySQL server和MySQL InnoDB数据的一致性。

问题四:

如上图所示:如果崩溃发生在危险区间段内的任意一点,主库重启后,binlog中保存有一阶段提交分布式事务,但是MySQL InnoDB回滚了这个一阶段提交分布式事务。从而导致MySQL server和MySQL InnoDB数据不一致。一阶段提交的分布式事务会被回放到备库,最终导致备库数据和主库数据的不一致。

华为云数据库解决方案

如上图所示:

  1. 如果崩溃发生在阶段一,主库重启后,这个一阶段提交分布式事务既不在MySQL server中,也不在MySQL InnoDB中;
  2. 如果崩溃发生在阶段二,主库重启恢复过程中这个一阶段提交分布式事务会被MySQL InnoDB回滚掉,最终这个分布式事务既不在MySQL server中,也不在MySQL InnoDB中;
  3. 如果崩溃发生在阶段三,主库重启后,这个一阶段提交分布式事务既存在MySQL server中,也存在MySQL InnoDB中;

无论崩溃发生在上图中的哪一点,主库重启后,华为云数据库都能保证MySQL server和MySQL InnoDB数据的一致性。

华为云数据库很好地解决了分布式事务崩溃恢复安全的相关问题,极大地提升数据库的可靠性和可用性,提升了用户使用华为云数据库的体验。后续我们会持续在分布式事务方面做更多的优化和解决MySQL可能遇到的问题,也欢迎大家使用华为云数据库分布式事务,体验华为云数据库卓越的可靠性和可用性,期待您的反馈!https://www.huaweicloud.com/product/gaussdb_mysql.html

点击关注,第一时间了解华为云新鲜技术~

当MySQL执行XA事务时遭遇崩溃,且看华为云如何保障数据一致性的更多相关文章

  1. MySql 执行 DELETE/UPDATE时,报 Error Code: 1175错误

    MySql 执行 DELETE FROM Table 时,报 Error Code: 1175. You are using safe update mode and you tried to upd ...

  2. MySQL 执行 'use databases;' 时很慢

    问题描述: 就是这么个情况,登录数据库切换库时感觉很卡,需要等待几秒钟. 案例: shell > mysql -uroot -ppassword mysql> use databases; ...

  3. PHP 操作 MySQL 执行数据库事务

    <?php $mysqli=new mysqli();//实例化mysqli $mysqli->connect('localhost','root','admin','test'); if ...

  4. ## 【分布式事务】面试官问我:MySQL中的XA事务崩溃了如何恢复??

    写在前面 前段时间搭建了一套MySQL分布式数据库集群,数据库节点有12个,用来测试各种分布式事务方案的性能和优缺点.测试MySQL XA事务时,正当测试脚本向数据库中批量插入数据时,强制服务器断电! ...

  5. MySQL数据库分布式事务XA优缺点与改进方案

    1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...

  6. DTP模型之一:(XA协议之三)MySQL数据库分布式事务XA优缺点与改进方案

    1 MySQL 外部XA分析 1.1 作用分析 MySQL数据库外部XA可以用在分布式数据库代理层,实现对MySQL数据库的分布式事务支持,例如开源的代理工具:ameoba[4],网易的DDB,淘宝的 ...

  7. XA事务与MySQL

    XA事务就是两阶段提交的一种实现方式 XA规范主要定义了事务管理器TM,和资源管理器RM之间的接口 根据2PC的规范,将一次事务分割成两个阶段 1. prepare阶段 TM向所有RM发送prepar ...

  8. 分布式事务(三)mysql对XA协议的支持

    系列目录 分布式事务(一)原理概览 分布式事务(二)JTA规范 分布式事务(三)mysql对XA协议的支持 分布式事务(四)简单样例 分布式事务(五)源码详解 分布式事务(六)总结提高 引子 从Mys ...

  9. Mysql数据库分布式事务XA详解

    XA事务简介 XA 事务的基础是两阶段提交协议.需要有一个事务协调者来保证所有的事务参与者都完成了准备工作(第一阶段).如果协调者收到所有参与者都准备好的消息,就会通知所有的事务都可以提交了(第二阶段 ...

随机推荐

  1. 【leetcode】122.Best Time to Buy and Sell Stock II(股票问题)

    You are given an integer array prices where prices[i] is the price of a given stock on the ith day. ...

  2. stlink 无法再keil中识别 按下复位键可以识别

    最近遇到一个很是头痛的问题 本来板子是好好的,就是从公司带回的家里 然后再次用stlink烧写程序的时候就出现了问题: 但是查看电脑端,上面是有stlink的 也就是电脑是好的, 我立刻又试了一下家中 ...

  3. Linux基础命令---ab测试apache性能

    ab ab指令是apache的性能测试工具,它可以测试当前apache服务器的运行性能,显示每秒中可以处理多少个http请求. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.F ...

  4. “==” 和 equals()的区别

    ※ "==" 和 equals()的区别 ※ == :比较. 基本数据类型比较的是值:. 引用类型比较的是地址值. ※ equals(Object o):1)不能比较基本数据类型, ...

  5. minikube metrics-server HPA 自动扩缩容错误

    minikube metrics-server pod 错误 启动 minikube addons enable metrics-server 之后查看 metrics-server pod 会有如下 ...

  6. 关于使用Topshelf创建服务

    目录 0. 背景说明 1. 使用Topshelf组件创建Windows服务 1.1 依赖Quartz.net实现定时任务 1.2 依赖于Topshelf创建服务类 1.3 log4net的配置文件lo ...

  7. 【.NET 与树莓派】控制彩色灯带(WS28XX)

    彩色灯带,相信不用老周多说,大家都知道,没准你家里的灯墙里面就有.老周的茅屋是早期建造的,所以没有预留的灯槽,明灯的话是不好看的,因此老周家里没使用灯带.不过,像柜子后面,显示器后面,书桌边沿这些地方 ...

  8. 软件开发生命周期(SDLC)

    一.简介 软件开发生命周期又叫做 SDLC(Software Development Life Cycle),它是集合了计划.开发.测试和部署过程的集合.如下图所示 : 二.五个阶段 1.分析阶段: ...

  9. Tableau使用折线图和饼图的组合

    一.订单日期拖拽至列-右键天(具体到年月日) 二.订单日期拖拽至筛选器-年月-随机选择一个月的数据 三.创建计算字段-LOD-销售额 {EXCLUDE[类别]:SUM([销售额])} 四.销售额和刚刚 ...

  10. 车载以太网第二弹|测试之实锤-1000BASE-T1物理层PMA测试实践

    背景 100BASE-T1方兴未艾,国内外OEM量产车型纷至沓来:为了满足高带宽的应用场景需求(如图像.雷达等数据传输),1000BASE-T1将至已至,如大众MEB平台采用1000BASE-T1总线 ...