前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MYSQL 分布式哪里有你想的那么简单之 XA协议

MYSQL 分布式哪里有你想的那么简单之 XA协议

作者头像
AustinDatabases
发布2020-03-08 14:07:22
9920
发布2020-03-08 14:07:22
举报
文章被收录于专栏:AustinDatabases

是在是抱歉,本来每周一都是 POSTGRESQL 的,但由于某些原因这周更换顺序,下周会恢复的。

最近有点不大爽,主要是有的人认为MYSQL分布式中间件并没有那么复杂,就是一个通过设置分区键进行数据下发的软件而已,实际上呵呵

首先要说明的是,什么是XA 协议,XA是一种两阶段提交协议,很多数据库和事务监视器都支持,它通过协调访问多个关系数据库的单个事务来确保数据完整性。XA保证在所有参与的数据库中提交事务更新,或者从所有数据库中完全回滚,恢复到事务开始之前的状态。

为了参与XA事务,XA资源必须让事务管理器知道其自身。一旦登记了XA资源,事务管理器将确保XA资源参与事务,并在事务的生存期内对XA资源进行适当的方法调用。要完成XA事务,所有资源管理器都参与一个两阶段提交(2pc)。XA事务中的提交称为两阶段提交,因为在提交过程中有两次传递。

在第一轮中,事务管理器询问每个资源管理器是否在提交事务时遇到任何问题。如果任何资源管理器反对提交事务,则任何一方对XA事务中涉及的任何资源所做的所有工作都必须全部回滚。

事务管理器对每个已征募的XA资源调用rollback()方法。如果没有资源管理器反对提交,那么第二轮将涉及事务管理器对每个已征募的XA资源实际调用commit()。这个过程保证了可以跨多个资源的事务的ACID(原子性、一致性、隔离性和持久性)属性。

到这里不拉不拉,你说了老半天,到底这些有什么关系,DBLE 分布式中间数据库的中间件,就是利用MYSQL 通用的 XA 协议来做的,如果不知道DBLE,那请百度一下。

所以XA 协议对于分库分库分表是很重要的一个协议。

下面是XA 协议的一些步骤

1 XA START

2 Some SQL statement

3 XA END

4 XA Prepare

5 XA Commit or Rollback

下面我们看一下

举例,如果三个物理数据中的一个数据库,在中间件下发数据的时候,其中一个进行了重启,回怎么样,如果是在 MYSQL 5.6 版本的时候,那很可能就丢数据的情况,上面的话如果不理解的话我们还是捋一捋

  1. 中间件已经向分库1和分库2,分库3,上发送完了 xa prepare ‘xid1’语句,并得到了成功的回复
  2. 中间件向分库1,3上发送了 ‘xa commit ‘xid1’语句,并已经成功返回
  3. 当 中间件向分库2上发送 ‘xa commit ‘xid1’时,网络断开了,或者分库2的数据库实例被kill了
  4. 当网络恢复(这时相关的Session已经退出了)或数据库实例再启动后(或切换到备库),XA prepare了的事务已经回滚了, 当中间件 XA commit ‘xid1’发过来后数据库实例根本找不到xid1这个xa事务

上面的流程就导致了分布式事务的不一致:分库1,3提交了事务,分库2回滚了事务,整个事务提交了一半,回滚了一半。

所以使用MYSQL5.6的同学你要注意了,MYSQL5.6中是没有 xa prepare 的严格的持久化的,当Session断开,数据库CRASH等情况下这些事务会被回滚掉,并且一个主库配了SemiSync的情况下xa prepare了的事务也不会被发送的SLAVE库,当主库切换到备库这些事务也就丢失。

所以安全的使用中间件的情况一定是你使用了MYSQL.5.7 的情况下,分布式的MYSQL 才能有安全的保证。

我们来做一个实验

代码语言:javascript
复制

然后,机器突然就崩溃了。如果是一般的事务,那一定就消失了。下图是机器已经重启了,同时数据也没有插入。

然后我们在commit

数据就回来了。通过这样的方式分布式中间件是可以保证某个物理库出现问题后,在变得正常后的数据是可以进行恢复的。

XA RECOVER;

xa recover; 是可以看到在prepare 状态的事务,参见上图

同时在BINLOG 中也是有相关的XA的记录,所以就算是切换,也不会导致分布式事务的丢失。

所以,说分布式中间件就是一个通过数据分片键进行数据分发谁都可以做的这样的说法,我只能表达 呵呵 二字。

'

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AustinDatabases 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档