MySQL分佈式事務

MySQL5.0.3開始支持分佈式事務,只支持InnoDB引擎。
 1. 分佈式事務原理
   使用分佈式事務的應用程序涉及一個或多個資源管理器和一個事務管理器。
    資源管理器(RM)用於提供通向事務資源的途徑,數據庫服務器是一種資源管理器。該管理器必須可以提交或回滾由RM管理的事務。
    事務管理器(TM)用於協調作爲一個分佈式事務一部分的事務。TM與管理每個事務的RMs進行通信。在一個分佈式事務中,各個單個事務均是分佈式事務的“分支事務”。分佈式事務和各分支通過一種命名方法進行標識。
    用於執行分佈式事務的過程使用兩階段提交,發生時間在由分佈式事務的各個分支需要進行的行動已經被執行之後。
    第一階段,TM告知分支事務預備好提交,用於管理分支RM會記錄分支行動,分支會指示是否可以提交,這個指示會用在第二個階段。
    第二階段,TM告知RMs是否提交或回滾。所有分支指示可以提交,則所有分支被告知提交,有任何分支指示不能提交則所有分支被告知回滾。
    2.分佈式事務語法
      分佈式事務(XA事務)的SQL語法主要包括:
        XA {START|BEGIN} xid     啓動一個XA事務 (xid 必須是一個唯一值; )    
        XA END xid    結束一個XA事務 
XA PREPARE xid    準備
XA COMMIT xid [ONE PHASE]    提交XA事務
XA ROLLBACK xid  回滾XA事務
XA RECOVER   查看處於PREPARE 階段的所有XA事務


事務標識符xid
xid 是一個XA事務標識符,它由客戶端提供或者有mysql服務器生成。
xid的格式一般爲 xid : gtrid [, bqual [, formatID]] ;
gtrid是一個分佈式事務標識符,
bqual是一個分支限定符,默認是空串

formatID是一個數字,用於標識由gtrid和bqual值使用的格式,默認值是1。



3.存在的問題
      如果分佈式在達到prepare狀態時,數據庫異常重新啓動,服務器重新啓動後,可以繼續對分支事務進行提交或者回滾操作,但是提交的事務沒有寫binlog,可能導致使用binlog恢復丟失部分數據。如果存在複製的數據庫,有可能導致主從的護具庫的數據不一致。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章