首页 » PHP教程 » phpxa事务技巧_详解Mysql数据库分布式事务XA附实验说明

phpxa事务技巧_详解Mysql数据库分布式事务XA附实验说明

duote123 2024-11-27 0

扫一扫用手机浏览

文章目录 [+]

Mysql 的XA事务分为内部XA和外部XA。
外部XA可以参与到外部的分布式事务中,须要运用层参与作为折衷者;内部XA事务用于同一实例下跨多引擎事务,由Binlog作为折衷者,比如在一个存储引擎提交时,须要将提交信息写入二进制日志,这便是一个分布式内部XA事务,只不过二进制日志的参与者是MySQL本身。

MySQL 从5.0.3开始支持XA分布式事务,且只有InnoDB存储引擎支持。
MySQL Connector/J 从5.0.0版本之后开始直接供应对XA的支持。

phpxa事务技巧_详解Mysql数据库分布式事务XA附实验说明

须要把稳的是, 在DTP模型中,mysql属于资源管理器(RM)。
而一个完全的分布式事务中,一样平常会存在多个RM,由事务管理器TM来统一进行折衷。
因此,这里所说的mysql对XA分布式事务的支持,一样平常指的是单台mysql实例如何实行自己的事务分支。

phpxa事务技巧_详解Mysql数据库分布式事务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事务操作流程

mysql> XA START 'xatest';mysql> INSERT INTO t VALUES (1,'hwb');mysql> XA END 'xatest';mysql> XA PREPARE 'xatest';mysql> XA COMMIT 'xatest';

XA RECOVER 先容

XA RECOVER 列出所有处于PREPARE状态的XA事务:

mysql> XA RECOVER;

字段解释:

formatID 是事务xid的formatID部分。
gtrid_length 是xid的gtrid部分的长度,以字节为单位。
bqual_length 是xid的bqual部分的长度,以字节为单位。
data 是xid的gtrid部分和bqual部分的串联。

在用一个客户端环境下,XA事务和本地(非XA)事务相互排斥,如果已经发布了XA START来开启一个事务,则本地事务不会被启动,知道XA事务被提交或者被回滚为止;相反的,如果已经利用START TRANSACTION启动一个本地事务,则XA语句不能被利用,直到该事务被提交或者回滚为止,而且XA事务仅仅被InnoDB存储引擎支持。

如果XA事务达到PREPARE状态时MySQL做事器宕机,当做事看重启后,做事器会回滚任何未完成的XA事务,纵然该事务已经达到了PREPARE状态;如果客户端连接终止,而做事器连续运行,做事器将回滚任何未完成的XA事务,纵然该事务已经达到PREPARED状态。

以为有用的朋友多帮忙转发哦!
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

标签:

相关文章

php开辟署理技巧_怎么理解PHP代理模式

在前面的文章中,我们已经给大家大略先容了PHP代理模式的根本观点,相信大家对代理模式也有了一点理解。本节内容就结合详细的代码示例,...

PHP教程 2024-12-14 阅读0 评论0

php55xhprof技巧_PHP机能分析神器XHGUI

本文先容XHGui(MySQL版)的安装、配置和利用。XHGui基于XHProf,但是较XHpro更加便捷直不雅观,由于它不须要修...

PHP教程 2024-12-14 阅读0 评论0