MySQL分布式事物(XA事物)的使用

來源:互聯網
上載者:User

標籤:就是   nbsp   開始   blank   不同   文章   oschina   recover   width   

有時一個系統的資料 放在不同的庫之中。如果用普通的事物 一個分支庫提交成功了,另外一個分支庫提交失敗了,

這候 兩個庫沒有同步的成功或者失敗。會導致系統資料的不完整。

對於處理這種情況 MySQL有了處理分布式(XA)事物的文法

 XA START xid 用於啟動一個帶給定xid的XA事物。

xid包含3個部分 gtrid,bqual,formatID

  • gtrid 是一個分布式事物的標識符,一個分布式事物的每個XA事物的gtrid必須相同,這樣可以明確知道每個XA事物屬於哪個分布式事物。
  • bqual 是一個分支限定符,一個分布式事物的所每個XA事物的bqual值必須不同。
  • formatID 是一個數字,用於標識由gtrid和bqual值使用的格式,可以不寫 預設是1 。

分布式的關鍵在於如何確保分布式事物的完整性,以及在某個分支出現問題時的故障解決。

XA事物的相關命令就是提供給應用如何在多個獨立的資料庫之間進行分布式事物的管理,包括啟動一個分支事物,使事物進入準備階段以及事物的實際提交復原操作等。

session1 in db1 session2 in db2
xa start ‘gtridtest‘,‘bqualdb1‘  資料庫db1中啟動一個分布式事物的一個分支 xa start ‘gtridtest‘,‘bqualdb2‘資料庫db2中啟動一個分布式事物的一個分支
update db1_table1 set content = ‘測試‘ where id =1; update db2_table1 set content = ‘實驗‘ where id =1;
xa end  ‘gtrid _test‘,‘bqual_db1‘ 第一階段提交 xa end  ‘gtrid _test‘,‘bqual_db2‘ 第一階段提交
xa prepare ‘gtrid _test‘,‘bqual_db1‘ 進入prepare狀態 xa prepare ‘gtrid _test‘,‘bqual_db2‘進入prepare狀態
 兩個事物都進入準備提交階段,如果之前遇到任何錯誤 會復原所有分支 xa recover 命令可以查看PREPARE狀態下的事物(我測試的並沒有復原。。。。)
xa commit ‘gtrid _test‘,‘bqual_db1‘ xa commit ‘gtrid _test‘,‘bqual_db2‘
 一旦開始提交操作 則需要保證全部的分支都要提交成功 如果失敗 請看文章結尾

 

 如果分支事物達到prepare狀態的時,遇到斷電等異常。伺服器重新啟動之後(xa recover可以查到未完成的prepare狀態下的XA事物),可以繼續對分支 進行復原或者提交操作 ;

這麼看 其實分布式事物也不是完美的 xa事物prepare之後遇到異常不會自動復原,需要手動進行復原或者提交。

javax.transaction.xa包 是jdbc控制MySQL XA事物的API

 

MySQL分布式事物(XA事物)的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.