美文网首页
mysql的XA语法

mysql的XA语法

作者: 无聊之园 | 来源:发表于2019-06-10 18:41 被阅读0次

AP: application 应用程序
RM:resouceManager 资源管理器,tm管理的各个事务,比如各个mysq server
TM:transaction manager 全局事务管理器,比如,写的应用程序,开启XA事务,分配唯一标识符,prepare,commit,rollback等全局控制。

mysql的XA语法有几步:

第一阶段,开启事务,准备提交
XA START 'helloworld1':开启一个XA事务,分配xid
处理业务逻辑
XA END 'helloworld1':标记业务逻辑处理结束
XA PREPARE 'helloworld1':询问rm是否准备好了提交事务,如果事务提交不了,则报错
// 第二阶段,提交事务
XA COMMIT 'helloworld1':如果所有的rm都准备号了提交事务,则这里进行提交
XA ROLLBACK 'helloworld':如果有rm出错了,或者,PREPARE阶段报错了,则进行回滚。

这里有几个疑问:
1.如果用普通的start transaction,commit做上面的事情,会发生什么?
commit阶段可能会出错,导致前几个事务commit成功,最后一个commit失败,导致数据不一致。
而xa事务,如果commit出错,prepare阶段就会出错,就可以回滚了。

2.为什么会存在end和prepare,假设只有一个prepare好像也没有问题。

XA分布式事务的落地实现,比如JTA,但是,XA只能是一个应用操作多个数据库,在微服务环境的多个应用情况下,恐怕就不好做了,需要把TM抽离出中间层。

个人觉得:这些理解就好,无需深究,光mysql的Xa需要serializable环境,包装部脏读就很难办了。
真正落地使用,可以参考,spring cloud Alibaba的seate。

相关文章

网友评论

      本文标题:mysql的XA语法

      本文链接:https://www.haomeiwen.com/subject/vhetfctx.html