啟動報錯現象
InnoDB: Transaction 0 4497755 was in the XA prepared state.
InnoDB: 3 transaction(s) which must be rolled back or cleaned up
[Warning] Found 3 prepared XA transactions
恢復流程
- 登入 MySQL
- 查看準備態事務:
XA RECOVER;
-- 輸出 formatID, gtrid_length, bqual_length, data (xid 拼接)
- 逐個回滾:
XA ROLLBACK 'gtrid', 'bqual', formatID;
-- 例:
XA ROLLBACK '1-7f000001:bae5:4b6928eb:fb5c3', '7f000001:bae5:4b6928eb:fb5cd', 131075;
- 重啟 MySQL,恢復正常
XID 結構說明
formatID:格式標識
gtrid:全局事務 ID
bqual:分支限定符
data = gtrid + bqual 拼接
預防建議
- 應用層確保 XA 事務正常提交/回滾,避免 prepared 狀態殘留
- 監控
INNODB_METRICS 中 trx_rseg_history_len 等指標
- 定期檢查
XA RECOVER 輸出