資料庫分散式事務 - XA
阿新 • • 發佈:2021-10-17
1. 理論
mysql5.0.3以上支援分散式事務
分散式事務涉及N個資源管理器和一個事務管理器
資源管理器:
事務管理器TM:與每個資源管理器通訊
mysql執行XA時,mysql伺服器相當於一個資源管理器,與mysql連線的客戶端相當於事務管理器 - 沒懂,我以為是相反的。
2. 語法:
-- 開啟XA事務 XA START 'test','db1' -- 第一個提交階段, 使事務進入prepare狀態 XA END 'test','db1' XA PREPARE 'test','db1' -- 第二個提交階段, 提交或者回滾分支事務 XA COMMIT 'test','db1' 或者(XA ROLLBACK 'test','db1') -- 檢視當前處於prepare狀態的分支事務的詳細資訊 XA RECOVER
'test','db1'解釋:
'test','db1'是 xid, 每個XA事務必須有一個唯一的xid值,xid是一個xa事務識別符號,用來唯一標識一個分散式事務。
xid格式: gtrid, bqual,formatId
相同的分散式事務使用相同的gtrid, 這樣就可以明確知道XA事務屬於哪個分散式事務
bqual是分支限定符,對於一個分散式事務中的每個分支事務,bqual值必須是唯一的
3.試驗
準備2個數據庫兩個事務:
db1對應表TEST_XA_1
db2對應表TEST_XA_2
3.1 開啟XA分散式事務
事務1
事務2:
事務1插入資料:
事務2插入資料:
3.2 一階段提交
事務1 一階段提交
事務2 一階段提交
檢視當前事務分支有兩個
這時候還沒提交,再開一個事務還是查不到資料- 查test_xa_2同樣查不到資料
3.3 二階段提交
事務1和事務2分別二階段提交
3.4驗證結果
再查結果提交了 - test_xa_2也有資料了