本机事务(transaction)
start transaction; // 开始一个事务 |
分布式事务(xa)
xa start 'test', 'db1'; -- 启动xid='text', 分支='db1'的分布式事务 |
| DB1 | DB2 | |
|---|---|---|
| xa start ‘transxxx’ ‘db1’ | xa start ‘transxxx’ ‘db2’ | 开始事务 |
| insert db1 .. | update db2 … | |
| xa end ‘transxxx’ ‘db1’ | xa end ‘transxxx’ ‘db2’ | |
| xa prepare ‘transxxx’ ‘db1’ | xa prepare ‘transxxx’ ‘db2’ | 进入Prepare阶段 |
| xa commit ‘transxxx’ ‘db1’ | xa commit ‘transxxx’ ‘db2’ | 提交事务 |
命令说明:
- 开始事务:
xa start xid, xid是某个分布式事务的唯一id, xid分三部分: 分布式事务标识+事务分支标识+formatid- 上面的例子只有 “分布式事务标识+事务分支标识”, 后者用db1/db2表示在不同库上的事务分支
- xa prepare:
- xa commit:

实现
@todo: MySQL分布式事务XA似乎用的是2PC ? 事务管理器组件 atomikos 的实现? @todo