萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL XA 事務崩潰恢復全流程:從報錯到 XA ROLLBACK 實戰

崩潰現場:InnoDB 啟動報錯

InnoDB: The log sequence number in ibdata files does not match
InnoDB: the log sequence number in the ib_logfiles!
InnoDB: Database was not shut down normally!
InnoDB: Starting crash recovery.
...
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.
InnoDB: 3 transaction(s) which must be rolled back or cleaned up

明確提示:3 個 XA 事務處於 PREPARED 狀態,未提交也未回滾。

排查步驟:XA RECOVER 獲取事務 XID

mysql> XA RECOVER;
+----------+--------------+--------------+------------------------------------------------------------+
| formatID | gtrid_length | bqual_length | data                                                       |
+----------+--------------+--------------+------------------------------------------------------------+
| 131075   | 30           | 28           | 1-7f000001:bae5:4b6928eb:f06397f000001:bae5:4b6928eb:f0650 |
| 131075   | 30           | 28           | 1-7f000001:bae5:4b6928eb:fb5c37f000001:bae5:4b6928eb:fb5cd |
| 131075   | 30           | 28           | 1-7f000001:bae5:4b6928eb:f03ea7f000001:bae5:4b6928eb:f0400 |
+----------+--------------+--------------+------------------------------------------------------------+

data 列為 gtrid + bqual 拼接字符串,需按 gtrid_length、bqual_length 切分。

恢復操作:XA ROLLBACK 清理殘留事務

-- 語法:XA ROLLBACK 'gtrid','bqual',formatID
mysql> XA ROLLBACK '1-7f000001:bae5:4b6928eb:fb5c3','7f000001:bae5:4b6928eb:fb5cd',131075;
Query OK, 0 rows affected (0.41 sec)

依次回滾三個事務後,重啟 MySQL 即恢復正常。

MySQL XA 實現限制必讀

  • 僅支持 InnoDB:其他引擎不支持 XA。
  • 外部 XA 模式:MySQL 作為資源管理器(RM),客戶端為事務管理器(TM);未實現內部 XA,跨引擎事務不受支持。
  • 語法限制:XA START 不支持 JOIN/RESUME;XA END 不支持 SUSPEND [FOR MIGRATE]。
  • bqual 唯一性要求:同一全局事務下每個 XA 事務的 bqual 必須不同(MySQL 額外限制,非 XA 規格)。

關鍵行為差異

場景行為
Server 崩潰重啟PREPARED 事務保留,可繼續 COMMIT/ROLLBACK
Client 斷開、Server 存活Server 會回滾未完成的 XA 事務(即使已 PREPARED)

⚠️ 若需在 Client 斷開後保留 PREPARED 事務,需修改 Binlog 機制,現有版本不支持。

copyright © 萬盛學電腦網 all rights reserved