前置知识: MySQL

分布式事务

00:00
1 min Advanced 2026/6/14

MySQL分布式事务:XA事务协议、两阶段提交、MySQL XA语法与跨库事务处理

1. XA 事务概述

XA 是 X/Open 组织定义的分布式事务处理标准,采用两阶段提交(2PC)协议

1.1 核心角色

角色说明
AP(应用程序)定义事务边界
TM(事务管理器)协调分布式事务
RM(资源管理器)管理具体资源(如数据库

1.2 两阶段提交

阶段1:Prepare
  TM → RM1: PREPARE
  TM → RM2: PREPARE
  RM1 → TM: OK
  RM2 → TM: OK

阶段2:Commit/Rollback
  TM → RM1: COMMIT
  TM → RM2: COMMIT

2. MySQL XA 语法

-- 开始 XA 事务
XA START 'xid_001';

-- 执行 SQL
UPDATE accounts SET balance = balance - 100 WHERE id = 1;

-- 结束事务(进入 PREPARED 状态)
XA END 'xid_001';

-- 第一阶段:准备
XA PREPARE 'xid_001';

-- 第二阶段:提交或回滚
XA COMMIT 'xid_001';
-- 或
XA ROLLBACK 'xid_001';

3. 跨库 XA 事务

-- 在两个数据库上执行 XA 事务
-- 数据库1
XA START 'transfer_001';
UPDATE db1.accounts SET balance = balance - 100 WHERE id = 1;
XA END 'transfer_001';
XA PREPARE 'transfer_001';

-- 数据库2
XA START 'transfer_001';
UPDATE db2.accounts SET balance = balance + 100 WHERE id = 2;
XA END 'transfer_001';
XA PREPARE 'transfer_001';

-- 两个都 PREPARE 成功后提交
-- 数据库1
XA COMMIT 'transfer_001';
-- 数据库2
XA COMMIT 'transfer_001';

4. 查看XA事务

-- 查看所有 XA 事务
XA RECOVER;

-- 查看特定状态的事务
XA RECOVER CONVERT XID;

5. XA 事务的限制

-- 1. 不支持嵌套 XA 事务
-- 2. XA 事务期间不能使用 SAVEPOINT
-- 3. 复制延迟:PREPARE 后 COMMIT 前的间隙
-- 4. 性能开销:两阶段提交增加网络往返
-- 5. 需要应用层协调 TM

6. 替代方案

-- 1. 本地消息表
-- 2. TCC(Try-Confirm-Cancel)
-- 3. Saga 模式
-- 4. Seata 等分布式事务框架

知识检测

学习进度

-- 已学文档
--% 知识覆盖率

学习推荐

专注模式