激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - Mysql - 一文搞懂MySQL XA如何實現分布式事務

一文搞懂MySQL XA如何實現分布式事務

2021-12-02 16:50神技圈子 Mysql

MySQL如何實現多個MySQL數據庫更新的一致性呢?那就是MySQL XA,本文就來介紹一下MySQL XA如何實現分布式事務,具有一定的參考價值,感興趣的可以了解一下

前言

mysql支持單機事務的良好表現毋庸置疑,那么在分布式系統中,涉及多個節點,mysql又是如何實現分布式事務的呢?比如開發一個業務系統,它接受外部的請求,然后訪問多個內部其它系統才能執行該請求。執行時我們需要同時更新多個數據庫的值(d1,d2,d3)。由于系統必須處于一個一致性,也就是這三個數據庫的值要么同時更新成功,要么全部不更新。不然會造成子系統有些指令成功了,有些指令尚未執行。導致對結果理解混亂。

那么,mysql如何實現多個mysql數據庫更新的一致性呢?那就是mysql xa。mysql正是靠支持xa規范的二階段提交協議,才實現了多個數據庫的操作。

xa 協議

提到xa規范就得來聊一下dtp模型(distributed transaction processing)。xa規范就是約定dtp模型中的兩個模塊事務管理器和資源管理器的通訊方式。dtp其實就是分布式事務處理

一文搞懂MySQL XA如何實現分布式事務

各個模塊的作用如下:

  • ap(application program):應用程序,定義事務邊界(定義事務開始和結束)并訪問事務邊界內的資源。
  • rm(resource manger)資源管理器: 管理共享資源并提供外部訪問接口。供外部程序來訪問數據庫等共享資源。此外,rm還具有事務的回滾能力。
  • tm(transaction manager)事務管理器:tm是分布式事務的協調者,tm與每個rm進行通信,負責管理全局事務,分配事務唯一標識,監控事務的執行進度,并負責事務的提交、回滾、失敗恢復等。

剛開始看可能覺得不好理解,總結起來該架構就是應用程序訪問及使用資環管理器提供的共享資源,通過事務管理器提供的事務接口(tx interface)定義事務操作。事務管理器和資源管理會基于xa規范執行二階段提交協議。
xa規范流程如下圖所示

一文搞懂MySQL XA如何實現分布式事務

  • 應用程序ap向事務管理器tm發起事務請求
  • tm調用xa_open()建立同資源管理器的會話
  • tm調用xa_start()標記一個事務分支的開頭
  • ap訪問資源管理器rm并定義操作,比如插入記錄操作
  • tm調用xa_end()標記事務分支的結束
  • tm調用xa_prepare()通知rm做好事務分支的提交準備工作。其實就是二階段提交的提交請求階段。
  • tm調用xa_commit()通知rm提交事務分支,也就是二階段提交的提交執行階段。
  • tm調用xa_close管理與rm的會話。
    • 這些接口一定要按順序執行,比如xa_start接口一定要在xa_end之前。此外,這里千萬要注意的是事務管理器只是標記事務分支并不執行事務,事務操作最終是由應用程序通知資源管理器完成的。另外,我們來總結下xa的接口
  • xa_start:負責開啟或者恢復一個事務分支,并且管理xid到調用線程
  • xa_end:負責取消當前線程與事務分支的關系
  • xa_prepare:負責詢問rm 是否準備好了提交事務分支 xa_commit:通知rm提交事務分支
  • xa_rollback:通知rm回滾事務分支

如何通過mysql xa實現分布式事務

mysql中存在兩種xa事務,一種是內部xa事務主要用來協調存儲引擎和二進制日志,一種是外部事務可以參與到外部分布式事務中(比如多個數據庫實現的分布式事務),這里我們主要討論外部事務。

注:mysql中只有當隔離級別設置為serializable的時候才能使用分布式事務。
mysql的xa語法如下

?
1
2
3
4
5
6
xa {start|begin} xid [join|resume]
xa prepare xid
xa end xid
xa commit xid[one phase]
xa rollback xid
xa recover[convert xid ]

其中xid作為事務id,唯一表示一個事務分支,每個事務分支都有一個id。
首先要確認是否開啟了xa 功能

一文搞懂MySQL XA如何實現分布式事務

設置隔離級別為serializable

一文搞懂MySQL XA如何實現分布式事務

執行結果

一文搞懂MySQL XA如何實現分布式事務

首先調用“xa start ‘xid' ”命令把xa事務置于activate狀態,接著執行構成事務的多條sql語句(比如 update
t1 set c1 = ‘a' where id=1),也就是指定事務的邊界。然后調用“xa end ‘xid' ”把事務放入idle狀態,也就是結束事務邊界。

一文搞懂MySQL XA如何實現分布式事務

接著,對于一個處于idle狀態的xa事務,可以執行“xa prepare”命令或一個“xa commit…one phase”命令,xa
prepare來執行二階段提交協議的提交請求階段。執行“xa recover”命令會列出處于prepared狀態的所有xa事務。xa
commit…one phase用于預備和提交事務,也就是轉換為一階段協議,直接提交事務。

一文搞懂MySQL XA如何實現分布式事務

最后,調用“xa commit”來提交事務(或者“xa rollback”回滾事務)。這樣就實現了全局事務的一致性了。

一文搞懂MySQL XA如何實現分布式事務

通過上面的流程可以看到,在mysql數據庫分布式事務中,mysql的角色其實是xa事務過程中的rm,tm是連接mysql服務器的客戶端。在分布式事務中一般會涉及到至少兩個rm,所以我們說的mysql支持xa協議是說mysql作為rm來說的,也就是說mysql實現了xa協議中rm應該具有的功能。

到此這篇關于一文搞懂mysql xa如何實現分布式事務的文章就介紹到這了,更多相關mysql xa分布式事務內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://blog.csdn.net/songguangfan/article/details/121194345

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲一区 国产 | 久久久久久久免费看 | 国产亚洲精品视频中文字幕 | 欧美一a一片一级一片 | 特一级黄色毛片 | 成年人免费高清视频 | 在线成人免费网站 | 黄色片视频免费观看 | 麻豆传传媒久久久爱 | 91网站链接 | 国产午夜精品一区二区三区四区 | 久久久久无码国产精品一区 | 日本中文一级片 | 国产一级午夜 | 欧美日韩在线播放一区 | 久久17| 精品久久久久久亚洲精品 | 激情综合网俺也去 | 久久久久久中文字幕 | 在线播放的av网站 | 美国一级免费视频 | 国产人成免费爽爽爽视频 | 天天草天天爱 | 国产1区2区在线 | 色爱99| 国产成年人小视频 | 日本黄色不卡视频 | 免费观看9x视频网站在线观看 | hd极品free性xxx护士人 | 麻豆视频在线免费观看 | 失禁高潮抽搐喷水h | 国产精品久久久久久久午夜片 | 欧美一级免费高清 | 久久久久久久一区二区三区 | 久久国产精品久久精品国产演员表 | 亚洲精品久久久久久下一站 | 91成| 国产精品久久久不卡 | 国产精品成人一区二区三区电影毛片 | 久久久精品视频网站 | 欧美特一级 |