要在 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 值由一个到三个部分组成:
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 是一个无符号整数。
gtrid 和 bqual 值由 MySQL 服务器的底层 XA 支持例程解释。但是,当 SQL 语句包含 XA 语句时,服务器使用特定的字符集。为安全起见,请将 gtrid 和 bqual 写为十六进制字符串。
xid 值通常由事务管理器生成。由一个 TM 生成的值必须不同于其他 TM 生成的值。给定的 TM 必须能够在 XA RECOVER 语句返回的值列表中识别自己的 xid 值。
XA START 启动一个 XA 事务,使用给定的 xidxid 值。每个 XA 事务必须具有唯一的 xid 值,因此该值不能当前被另一个 XA 事务使用。唯一性是使用 gtrid 和 bqual 值评估的。所有后续 XA 语句对于 XA 事务必须指定相同的 xid 值,如在 XA START 语句中给定的那样。如果您使用这些语句,但指定了不对应于某个现有 XA 事务的 xid 值,将发生错误。
XA START、XA BEGIN、XA END、XA COMMIT 和 XA ROLLBACK 语句不受默认数据库的过滤,当服务器以 --replicate-do-db 或 --replicate-ignore-db 运行时。
一个或多个XA事务可以是同一个全局事务的一部分。同一个全局事务中的所有XA事务必须在gtrid值。因此,
gtrid值必须是全球唯一的,以便不会对给定XA事务所属的全局事务产生歧义。
bqual部分
bqual值必须不同的要求不是XA规范的一部分。)
XA RECOVER语句返回MySQL服务器上处于
XA RECOVER需要XA_RECOVER_ADMIN权限。该权限要求防止用户发现其他人的未提交XA事务的XID值,而不影响正常的XA事务提交或回滚,因为启动它的用户知道其XID。
XA RECOVER输出行看起来像这样(对于一个示例
mysql> XA RECOVER;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data |
+----------+--------------+--------------+--------+
| 7 | 3 | 3 | abcdef |
+----------+--------------+--------------+--------+
输出列的含义如下:
-
formatID是事务的 formatID部分 -
gtrid_length是的 gtrid部分的字节长度 -
bqual_length是的 bqual部分的字节长度 -
data是的 gtrid和bqual部分的连接
XID值可能包含不可打印的字符。XA RECOVER允许可选的CONVERT XID子句,以便客户端可以请求十六进制形式的XID值。