黄东旭解析 TiDB 的核心优势
1918
2023-04-07
Mysql数据库分布式事务XA详解
XA事务简介
MySQL XA 事务基本语法
XA {START|BEGIN} xid [JOIN|RESUME] 启动一个XA事务 (xid 必须是一个唯一值; [JOIN|RESUME] 字句不被支持)
XA END xid [SUSPEND [FOR MIGRATE]] 结束一个XA事务 ( [SUSPEND [FOR MIGRATE]] 字句不被支持)
XA PREPARE xid 准备
XA COMMIT xid [ONE PHASE] 提交XA事务
XA ROLLBACK xid 回滚XA事务
XA RECOVER 查看处于PREPARE 阶段的所有XA事务
事务标识符xid
xid 是一个事务标识符,它由客户端提供或者有mysql服务器生成。
xid的格式一般为 xid : gtrid [, bqual [, formatID]] ;gtrid是一个全局事务标识符,bqual是一个分支限定符,formatID是一个数字,用于标识由gtrid和bqual值使用的格式。根据语法的表示,bqual和formatID是自选的。如果没有给定,默认的bqual值是''。如果没有给定,默认的fromatID值是1。
XA事务状态进展过程
1. 使用XA START 启动一个XA事务,并把它置为ACTIVE状态。
2. 对一个ACTIVE XA事务,发布构成事务的SQL语句,然后发布一个XA END 语句,XA END 把事务置为IDLE状态。
3. 对一个IDLE XA 事务, 发布一个XA PREPARE语句或者一个XA COMMIT ... ONE PHASE语句: 前者把事务置为PREPARE状态,此时XA RECOVER 语句的输出包含事务的xid值(XA RECOVER 语句会列出所有处于PREPARE状态的XA事务); 后者用于预备和提交事务,不会被XA RECOVER列出,因为事务已经终止。
4. 对一个PREPARE XA 事务,可以发布一个XA COMMIT语句来提交和终止事务,或者发布一个XA ROLLBACK 来回滚并终止事务。
简单的XA事务操作流程
XA RECOVER 介绍
XA RECOVER 列出所有处于PREPARE状态的XA事务:
注释:
1. formatID 是事务xid的formatID部分。
2. gtrid_length 是xid的gtrid部分的长度,以字节为单位。
3. bqual_length 是xid的bqual部分的长度,以字节为单位。
4. data 是xid的gtrid部分和bqual部分的串联。
在用一个客户端环境下,XA事务和本地(非XA)事务互相排斥,如果已经发布了XA START来开启一个事务,则本地事务不会被启动,知道XA事务被提交或者被回滚为止;相反的,如果已经使用START TRANSACTION启动一个本地事务,则XA语句不能被使用,直到该事务被提交或者回滚为止,而且XA事务仅仅被InnoDB存储引擎支持。
如果XA事务达到PREPARE状态时MySQL服务器宕机,当服务器重启后,服务器会回滚任何未完成的XA事务,即使该事务已经达到了PREPARE状态;如果客户端连接终止,而服务器继续运行,服务器将回滚任何未完成的XA事务,即使该事务已经达到PREPARED状态。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。