mysql xa_Mysql对XA的支持

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是无符号整型。

cc0c8d1b98797c0bf692fff469dab4bb.png

我们来看个实际例子

9cf54099bc4d

b93d6b1f2c66e2fe614de0574994bb14.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql创建新的表_Mysql 创建表

Mysql 创建表1.首先打开终端输入如下命令:/usr/local/MySQL/bin/mysql -u root -p其中root为用户名。2.这时会出现如下命令:Enter password:此时如果你没有改密码,直接敲回车。否则,输入你的密码。这样就可以访问你的数据库服务器…

mysql gfs2_Mysql_HA+IP_SAN+Clvmd+GFS2

Mysql_HAIP_SANClvmdGFS2GFS:全局文件系统,支持DLM锁管理,支持并发写,Centos6不超过16个节点适用于HA集群使用的共享存储适用于LB集群RealServer使用的共享存储mysql高可用集群架构设计1、节点主机系统:Centos6.52、高…

mysql 使用sum limit_mysql踩坑记录之limit和sum函数混合使用问题

问题复盘本次复盘会用一个很简单的订单表作为示例。数据准备订单表建表语句如下(这里偷懒了,使用了自增ID,实际开发中不建议使用自增ID作为订单ID)CREATE TABLE order (id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘订单ID‘,amount decimal(10,2) NOT…

mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程

1. 视图视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临时表摘出来,用视图去实现&…

ubuntu安装mysql5.7.17_ubuntu 16.04安装mysql-server_5.7.17

在MySQL官网上下载最新版的Ubuntu Linux专用的MySQL。我这里下载的是:mysql-server_5.7.17-1ubuntu16.04_amd64.deb-bundle.tar也可从以下mirrors下载:解压文件 命令为:rootubuntu:/# tar -zxvf mysql-server_5.7.17-1ubuntu16.04_amd64.deb-…

socket抓包_64、抓包分析tcp与udp

从前面的两个案例,我们了解到了如何通过原生socket函数分别创建tcp和udp服务,以及通过相应的客户端进行连接测试。在本文中,我们将继续深入地去了解tcp和udp的差别,和思考它们两者如何应该多个客户端请求1、抓包分析这里采用tcpdu…

c#水晶报表连接mysql,如何将数据库绑定到水晶报表?

i have C# program, i have DataSet that i want to bind to crystal report.how to do it ?解决方案Create a Typed DataSet from the "Add New Item > DataSet and give the dataseta useful name.In Server Explorer, drag a view with the fields you want in the…

fw313r手机登录_迅捷(FAST)fw313r路由器手机设置教程

本文中,鸿哥主要给大家介绍,迅捷(FAST)fw313r路由器用手机设置的方法。一台新买回来的迅捷(FAST)fw313r路由器,要用手机来设置它连接Internet上网,需要以下几个步骤:1、正确连接FW313R路由器2、手机连接FW313R的信号3、…

mysql 5.6.21不能选择安装路径_mysql5.6.21服务器安装图解(选择安装和数据目录)

mysql安装图解(服务器上安装mysql,只安装mysql服务)1.3 mysql安装及配置版本:MySQL5.6.21 64位1.3.1 安装.net framework.exe 4.0注意:mysql5.6版本需要安装.net framwork.exe 4.0环境1.3.2 安装mysql数据库(1)打开安装程序后,…

mysql替换sql中rank函数_MySQL sql Rank()函数实现

一字符串类 Concat函数:连接字符串 Instr函数:返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) 字符串大小写转换[upper()、ucase()和lower()、lcase()] upper()和ucase():把字符串中的小…

python决策树生成规则_ID3决策树(python实现)

决策树的生成(该函数是一个递归的过程)CreateTree输入:数据集、特征输出:字典型数据——决策树a、判断是否满足停止划分的条件若当前数据集的属性值为空,则投票表决当前样本中最多的类别若当前所有的样本类别相同,则返回当前数据的…

while循环python的范围_python-无法在while循环中从列表中排除一定范围内的项目

所以我发布了一个问题before,但是它过于简化了,正确地被标记为重复.我现在将更详细地发布我的问题,以便希望可以解决我的问题.简而言之如下:我有两个列表:a [10.0,20.0,25.0,40.0]和b [1.0,10.0,15.0,20.0,30.0,100.0]使用列表推导,我想从b中排除a中指…

怎么使用mysql打表_MySQL的表使用

-- 创建表CREATE TABLE teacher(id INT,NAME VARCHAR(20))-- 查看所有表SHOW TABLES;DESC student;DROP TABLE student;CREATE TABLE student(id INT,NAME VARCHAR(20),gender VARCHAR(2),age INT)-- ********一、增删改数据********* ----- 1.1 增加数据-- 插入所有字段。一定…

表级锁的mysql读写_Mysql的表级锁

我们首先需要知道的一个大前提是:mysql的锁是由具体的存储引擎实现的。所以像Mysql的默认引擎MyISAM和第三方插件引擎 InnoDB的锁实现机制是有区别的。可根据不同的场景选用不同的锁定机制。Mysql有三种级别的锁定:表级锁定、页级锁定、行级锁定一、定义…

account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...

【单选题】廉价磁盘冗余阵列RAID利用冗余技术实现高可靠性,其中RAID1的磁盘利用率为() 。【简答题】与直流调速相比,交流调速有何优点?【论述题】方法【单选题】以《老子注》一书驰名汉学界的学者是下列哪一位 ______【填空题】本任务中,所需的实训设备有:( )、( )、( )【单选…

创建mysql视图语法正确的是_MySQL创建视图的语法格式

视图,具有简化查询语句、安全性和保证逻辑数据独立性等作用创建视图的语法格式视图中,包含SELECT查询的结果,因此,视图的创建基于SELECT语句,和已经存在的数据表,视图可以建立在一张表上,也可以…

爬空气质量MySQL_爬虫:利用selenium采集某某环境网站的空气质量数据

前言:在上一篇文章中,我们介绍了在http://PM2.5.in这个网站采集空气质量的数据,本篇文章是对其产生的一些问题的另一种解决方案,提供更加权威的数据采集。技术框架:selenium、json、etree这里的selenium是一种自动化测…

mysql导出数据意义_11、mysql导出数据

1、使用select... into outfile语句导出数据(1)txt格式select *from runoob.tb1 into outfile /tmp/runoob.txt;(2)CSV格式select * from passwd into outfile /tmp/runoob.txt fields terminated by , enclosed by " lines terminated by \r\n;(3)生成一种文件&#xff0…

操作失败10秒内未完成启动服务mysql_01-MySQL 命令行-cmd用法-未完成

01.png02.png03.png04.png05.png06.png07.png08.png09.png一、mysql服务的启动和停止net stop mysqlnet start mysql二、登陆mysql语法如下: mysql -u用户名 -p用户密码键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,…

java时间聚类_mongodb 按照时间聚类 java

当存储到mongodb中的是string类型的时间,小tips:1. 那么在对此域按照时间聚类(每周,每月)时就不能直接使用mongodb的time关键字了,因为mongodb有自己的时间类型,且目前它只认可自己的时间类型。2. 假如对于时间进行简单的聚类&…