1. 程式人生 > 其它 >資料庫分散式事務 - XA

資料庫分散式事務 - XA

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也有資料了