首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL XA 事務崩潰恢復流程與手動回滾實戰

     編輯:MySQL 資料庫相關知識

MySQL 異常重啟後,InnoDB 檢測到 3 個 XA 事務處於 PREPARED 狀態,需手動提交或回滾完成恢復。

錯誤日志關鍵信息

InnoDB: Transaction 0 4497755 was in the XA prepared state.
InnoDB: Transaction 0 4468551 was in the XA prepared state.
InnoDB: Transaction 0 4468140 was in the XA prepared state.
[Warning] Found 3 prepared XA transactions

恢復操作步驟

  1. 登錄 MySQL,查看待恢復 XA 事務:
    XA RECOVER;
    返回 formatID, gtrid_length, bqual_length, data(data = gtrid + bqual 拼接)。
  2. 根據 data 構造 XID 執行回滾(或提交):
    XA ROLLBACK 'gtrid','bqual',formatID;
    示例:XA ROLLBACK '1-7f000001:bae5:4b6928eb:fb5c3','7f000001:bae5:4b6928eb:fb5cd',131075;
  3. 重啟驗證,錯誤日志不再出現 prepared XA transactions 警告。

XA 事務限制說明

  • 僅支援 InnoDB 存儲引擎。
  • 屬「外部 XA」:MySQL 作資源管理器(RM),客戶端作事務管理器(TM)。未實現「內部 XA」(跨引擎兩階段提交)。
  • 不支援 JOIN/RESUME(XA START)、SUSPEND [FOR MIGRATE](XA END)。
  • 全局事務內每個 XA 分支的 bqual 必須唯一(MySQL 限制,非 XA 標準)。
  • 客戶端斷開連接時,Server 會回滾未完成 XA 事務(即使已 PREPARED),無法自動提交,需更改 binlog 機制才能改變此行為。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved