支援範圍
- 僅 InnoDB:MyISAM、Memory、NDB 等引擎不支援 XA。
- 外部 XA:MySQL 扮演資源管理器 (RM),應用/事務管理器 (TM) 協調多資源 (多 MySQL 實例、MQ、其他 DB)。
- 內部 XA 缺失:單實例跨引擎事務 (InnoDB + MyISAM) 無原生兩階段提交支援。
XA 語法限制
| 子句 | 支援狀態 | 備註 |
| XA START ... JOIN / RESUME | 不支援 | 標準 XA 功能缺失 |
| XA END ... SUSPEND [FOR MIGRATE] | 不支援 | 標準 XA 功能缺失 |
| xid.bqual 唯一性要求 | 強制要求 | 同一全域事務內每分支 bqual 必須不同,非標準限制 |
崩潰恢復行為
- 伺服器崩潰重啟:PREPARED 狀態事務保留,可手動
XA COMMIT/ROLLBACK。
- 客戶端斷線但伺服器存活:自動回滾 所有未完成 XA 事務 (含 PREPARED),無法自動提交。
- 根因:二進制日誌機制未記錄足夠資訊以支援單方面提交/回滾決策。
應用層設計建議
- TM 需具備超時重試:客戶端斷線後,TM 應重連並查詢
XA RECOVER 發現孤兒事務,決定提交/回滾。
- xid 設計:
gtrid (全域唯一) + bqual (分支唯一) + formatID。建議 gtrid 含 UUID + 時間戳。
- 監控孤兒事務:定期
XA RECOVER 掃描 PREPARED 超時事務,告警人工介入。
替代方案對比
| 方案 | 適用場景 | 複雜度 | 一致性保證 |
| MySQL XA | 跨多 MySQL 實例強一致 | 高 (需自建 TM) | 最終一致 (崩潰窗口風險) |
| Saga 模式 | 微服務長流程 | 中 (補償邏輯) | 最終一致 |
| 雙階段提交中介軟體 | 異構資源 (DB+MQ) | 高 (Seata/Atomikos) | 強一致 (視實作) |
| 應用層冪等 + 重試 | 大多數業務 | 低 | 最終一致 |
結語
MySQL XA 實作功能殘缺 (缺 JOIN/RESUME/SUSPEND)、恢復語意不完整 (客戶端斷線自動回滾),生產環境直接使用風險極高。建議:優先採用 Saga/冪等重試/中介軟體,僅在極少數強一致跨庫場景謹慎評估 XA,並建立完善 TM 故障恢復流程。