要在 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]对于 XA START,JOIN 和 RESUME 子句被识别,但没有效果。
对于 XA END,SUSPEND [FOR MIGRATE] 子句被识别,但没有效果。
每个 XA 语句都以 XA 关键字开头,大多数语句都需要一个 xid 值。一个 xid 是一个 XA 事务标识符。它指示语句适用于哪个事务。 xid 值由客户端提供,或由 MySQL 服务器生成。一个 xid 值有 1 到 3 部分
xid: gtrid [, bqual [, formatID ]]
gtrid 是一个全局事务标识符,bqual 是一个分支限定符,formatID 是一个标识 gtrid 和 bqual 值所用格式的数字。如语法所示,bqual 和 formatID 是可选的。默认 bqual 值为 ''(如果未提供)。默认 formatID 值为 1(如果未提供)。
gtrid 和 bqual 必须是字符串字面量,每个长度最多 64 字节(不是字符)。gtrid 和 bqual 可以通过几种方式指定。您可以使用带引号的字符串 ('ab')、十六进制字符串 (X'6162', 0x6162) 或位值 (b')。nnnn'
formatID 是一个无符号整数。
MySQL 服务器底层的 XA 支持例程会以字节形式解释 gtrid 和 bqual 值。但是,当解析包含 XA 语句的 SQL 语句时,服务器会使用一些特定的字符集。为了安全起见,请将 gtrid 和 bqual 编写为十六进制字符串。
xid 值通常由事务管理器生成。由一个 TM 生成的值必须与由其他 TM 生成的值不同。给定的 TM 必须能够在 XA RECOVER 语句返回的值列表中识别其自己的 xid 值。
XA START 使用给定的 xidxid 值启动一个 XA 事务。每个 XA 事务都必须具有唯一的 xid 值,因此该值当前不能被其他 XA 事务使用。使用 gtrid 和 bqual 值来评估唯一性。XA 事务的所有后续 XA 语句都必须使用与 XA START 语句中给出的相同 xid 值。如果您使用任何这些语句,但指定的 xid 值与任何现有 XA 事务都不对应,则会发生错误。
XA START、XA BEGIN、XA END、XA COMMIT 和 XA ROLLBACK 语句不会被默认数据库过滤,前提是服务器在运行时使用 --replicate-do-db 或 --replicate-ignore-db。
一个或多个 XA 事务可以是同一个全局事务的一部分。给定全局事务中的所有 XA 事务都必须在 xid 值中使用相同的 gtrid 值。因此,gtrid 值必须在全局范围内是唯一的,以避免对给定的 XA 事务属于哪个全局事务产生歧义。xid 值的 bqual 部分对于全局事务中的每个 XA 事务必须不同。(bqual 值必须不同的要求是当前 MySQL XA 实现的限制。这不是 XA 规范的一部分。)
XA RECOVER 语句返回 MySQL 服务器上处于 PREPARED 状态的那些 XA 事务的信息。(请参阅 第 15.3.8.2 节,“XA 事务状态”。)输出包括服务器上每个此类 XA 事务的一行,无论哪个客户端启动了它。
XA RECOVER 需要 XA_RECOVER_ADMIN 权限。此权限要求可以防止用户发现除自己以外的未决准备好的 XA 事务的 XID 值。它不会影响 XA 事务的正常提交或回滚,因为启动事务的用户知道其 XID。
XA RECOVER 输出行看起来像这样(对于一个包含部分 'abc'、'def' 和 7 的示例 xid 值)
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+输出列具有以下含义
formatID是事务xid的formatID部分gtrid_length是xid的gtrid部分的字节长度bqual_length是xid的bqual部分的字节长度data是xid的gtrid和bqual部分的串联
XID 值可能包含不可打印字符。XA RECOVER 允许使用可选的 CONVERT XID 子句,以便客户端可以请求以十六进制形式表示的 XID 值。