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 狀態,未提交也未回滾。
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 '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 即恢復正常。
XA START 不支持 JOIN/RESUME;XA END 不支持 SUSPEND [FOR MIGRATE]。bqual 必須不同(MySQL 額外限制,非 XA 規格)。| 場景 | 行為 |
|---|---|
| Server 崩潰重啟 | PREPARED 事務保留,可繼續 COMMIT/ROLLBACK |
| Client 斷開、Server 存活 | Server 會回滾未完成的 XA 事務(即使已 PREPARED) |
⚠️ 若需在 Client 斷開後保留 PREPARED 事務,需修改 Binlog 機制,現有版本不支持。