mysql8.0文档:https://dev.mysql.com/doc/refman/8.0/en/xa-statements.html。13.3.8.1 XA Transaction SQL Syntax章节讲述了Mysql对于XA事务的语法。

XA {START|BEGIN} xid [JOIN|RESUME] XA END xid [SUSPEND [FOR MIGRATE]] XA PREPARE xid XA COMMIT xid [ONE PHASE] XA ROLLBACK xid XA RECOVER [CONVERT XID]

首先,根据DTP(Distributed Transaction Processing: Reference Model)参考模型中,Mysql是作为资源管理器这一组件。所以Mysql也仅仅是作为XA规范中的一个组件而已,Mysql对于XA的支持,其实是提供了RMs与TM之间的接口交互支持。TM(Transaction manager)是一个事务的协调者,协调众多的事务参加者。明白了这一点以后,我们再来看Mysql中使用XA事务的语法,mysql官方文档中也有详细的形容,我们在下面列举一二,另外关于mysql支持XA是从什么版本开始,以及java驱动包什么版本支持XA,请见以下文档原文

Support for XA transactions is available for the

InnoDB

storage engine. The MySQL XA implementation is based on the X/Open CAE document?Distributed Transaction Processing: The XA Specification. This document is published by The Open Group and available athttp://www.opengroup.org/public/pubs/catalog/c193.htm. Limitations of the current XA implementation are described in Section C.6, “Restrictions on XA Transactions”.

innodb存储引擎支持XA事务

Among the MySQL Connectors, MySQL Connector/J 5.0.0 and higher supports XA directly, by means of a class interface that handles the XA SQL statement interface for you.

5.0.0版本mysql连接驱动开始支持XA

XA事务命令都是XA开头的,xa start 和 xa begin 都可以开启一个xa事务,但是xa start 不支持join 、resume,这两个是什么,我暂时不理解,暂且不论,xa start 还需要跟一个xid,这个是事务的唯一标识,关于xid的构成,下面再详述,这里仅需要知道xid是一个事务的id标识就可。

xa end xid,即完成sql 操作后,让xa事务进入IDLE状态的命令,同样要指明xid,操作的是哪个XA事务,注意这里xa end并不是要结束xa事务,只是进入到IDLE状态,后续还有两阶段提交过程,prepare和commit;

xa prepare xid ,标识两阶段提交的第一个提交阶段,通知资源管理器RM做提交前的准备,防止数据丢失,之前探讨两阶段提交时已经讲了,这个阶段,mysql就会记录下这个事务的各种日志,防止丢失,即便宕机重启也能恢复。prepare结束就具有了这种恢复的能力,RM prepare回复TM,prepare成功后,RM会等TM的commit通知,而TM要等所有RM的成功消息,所有RM回复成功,TM就下发commit给所有RM;假如部分RM回复不成功,那么TM就下发rollback给所有RM回滚事务。

xa rollback xid就是回滚事务的指令,xa commit xid就是提交事务的指令,xa commit xid ONE PHASE 是明确知道RM只有一个的情况下,采用一阶段提交的方式,这种情况下就不需要prepare阶段了,xa end后就可xa commit xid ONE PHASE了。

xa recover ,是用来查看哪些xid已经完成prepare的,异常宕机情况下,xa recover也能列出宕机前哪些xa事务完成prepare,等待commit的。

xid: gtrid [, bqual [, formatID ]]

以上是xid的构成,gtrid全局事务id标识,而后bqual 事务分支标识,formatID是格式标识,具体什么用处暂时不明白。bqual和formatID都是可选,假如不给值时默认值分别为”和1.

gtrid 和 bqual 都必需是字符串类型,长度是64byte,formatID是无符号整型。

我们来看个实际例子

我建立了一个全局事务aaa,两个分支事务bbb和ccc。而后两个分支事务都进入了prepare,从分支事务ccc截图中xa recover可以看出。但是ccc回滚,bbb提交。最开始了解这块的时候,我认为既然一个全局事务,那么怎样能够一个回滚一个提交呢?后来仔细一想,这个过程应该是交给TM来统一的,mysql支持XA并不表现在控制全局事务下所有子事务一致提交,而是提供和TM交互的接口,由TM最终来控制,通知所有子事务提交,或者都回滚,而不会通知部分提交、部分回滚。

编程的方式使用XA事务和以上方式相似,后面有空整理出代码

mysql对xa的支持_Mysql对XA的支持相关推荐

  1. mysql xa 演示_mysql的XA事务恢复过程详解

    mysql数据库开机报错: InnoDB: The log sequence number in ibdata files does not match InnoDB: the log sequenc ...

  2. mysql gbk支持_mysql支持gbk

    在mysql数据库中,使用的是latin字符集,所以无法正常的支持中文字符,中文在数据库中显示为乱码"?"号.为了让mysql可以正常使用中文,尤其是当使用jsp连接mysql的时 ...

  3. mysql gbk支持_mysql如何支持gbk编码

    mysql支持gbk编码的方法:首先修改[my.cnf]文件:然后建立库表时指定gbk字符集,代码为[>show cereate table tablename]:最后修改jdbc驱动即可. m ...

  4. mysql选择utf 8编码_MySQL支持UTF-8编码全攻略

    来源:网海拾贝 最近看到良多若干关于MySql支持utf-8编码的成绩,恰好自身也要用,去找了一下,没有写的很片面的. 清算了一下,供各人参考. 在一下效能器设置测试议决 效能器设置: window2 ...

  5. mysql数据库引擎博客_mysql 数据库引擎常识全集

    1.mysql引擎简介: MyISAM引擎是mysql关系数据库管理系统的默认存储引擎(mysql 5.5以前).这种mysql表存贮结构从的旧的ISAM代码扩展出许多有用的功能.在新版本的mysql ...

  6. mysql myisam和innodb区别_MySQL 万字精华总结 + 面试100 问,吊打面试官绰绰有余

    一.MySQL架构 和其它数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用.主要体现在存储引擎的架构上,插件式的存储引擎架构将查询处理和其它的系统任务以及数据的存储提 ...

  7. mysql查询数据库存储引擎_MySQL数据库存储引擎

    存储引擎就是指表类型,数据库存储引擎决定了表在计算机中的存储方式. 1,查询mysql数据库支持的存储引擎类型:SHOW ENGINES \G("\G"的作用是让结构显示的更加美观 ...

  8. mysql的char在java中表示为_Java学习篇之-Mysql中varchar门类总结_mysql

    java学习篇之---mysql中varchar类型总结 Mysql中varchar类型总结 今天新做一个项目,需要自己进行数据库设计,发现自己对varchar的用法还不是很熟悉,所以查阅资料总结若下 ...

  9. mysql如何手写代码_mysql手写_mysql

    myisam innoDB是mysql常用的存储引擎 MyISAM不支持事务.也不支持外键,但其访问速度快,对事务完整性没有要求. InnoDB存储引擎提供了具有提交.回滚和崩溃恢复能力的事务安全.但 ...

最新文章

  1. Python3中参数*args和**kwargs介绍
  2. js+正文规则 高亮搜索关键字(二)
  3. mac安装brew简单方法
  4. hdu 1671 Phone List (字典树)
  5. 一个很小的 截图 库。 只需要依赖 jQuery
  6. Python源码剖析-深度探索动态语言核心技术
  7. 异速联:解决打印样式个性化设置
  8. 2023年北京航空航天大学材料与化工(金属方向)考研成功经验
  9. IDL多进程批处理遥感数据
  10. 关于读书,请你丢掉对书本的敬畏感
  11. 双人贪吃蛇java 代码_贪吃蛇课设--个人博客
  12. 为什么有人一星期能看3本书,你却一个月看不了1本
  13. html5border设置彩色,css中border颜色不同怎么设置?
  14. 7-5 计算个人所得税 (20分)
  15. 毕业去哪儿?看这里!神策数据 2023 校园招聘启动啦
  16. 金书中的武功传承(一代不如一代)
  17. 风雨砥砺,岁月如歌——Ts之箭头函数
  18. Python3调用百度翻译API进行英文翻译
  19. Java汉字转汉语拼音工具类
  20. 最新微软薪资曝光,Run去美国还是好选择吗?

热门文章

  1. “All in区块链”的迅雷,股价从最高点暴跌90%
  2. html判断是否有滚动条,如何判断有没有出现滚动条
  3. 如何把本地 PDF 文件添加到 iOS 的 iBooks
  4. 父与子的编程游戏——滑雪者游戏
  5. Axios取消请求ajax请求
  6. div同步滚动的方式
  7. QT和MFC的优缺点比较
  8. python播放声音——winsound模块
  9. css实现自定义虚线边框
  10. 阿里云宣布“不做SaaS、练好内功被集成”,意外吗?