最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)

 更新時(shí)間:2021年11月08日 10:09:00   作者:神技圈子  
MySQL如何實(shí)現(xiàn)多個(gè)MySQL數(shù)據(jù)庫(kù)更新的一致性呢?那就是MySQL XA,本文就來(lái)介紹一下MySQL XA如何實(shí)現(xiàn)分布式事務(wù),具有一定的參考價(jià)值,感興趣的可以了解一下

前言

MySQL支持單機(jī)事務(wù)的良好表現(xiàn)毋庸置疑,那么在分布式系統(tǒng)中,涉及多個(gè)節(jié)點(diǎn),MySQL又是如何實(shí)現(xiàn)分布式事務(wù)的呢?比如開(kāi)發(fā)一個(gè)業(yè)務(wù)系統(tǒng),它接受外部的請(qǐng)求,然后訪問(wèn)多個(gè)內(nèi)部其它系統(tǒng)才能執(zhí)行該請(qǐng)求。執(zhí)行時(shí)我們需要同時(shí)更新多個(gè)數(shù)據(jù)庫(kù)的值(D1,D2,D3)。由于系統(tǒng)必須處于一個(gè)一致性,也就是這三個(gè)數(shù)據(jù)庫(kù)的值要么同時(shí)更新成功,要么全部不更新。不然會(huì)造成子系統(tǒng)有些指令成功了,有些指令尚未執(zhí)行。導(dǎo)致對(duì)結(jié)果理解混亂。

那么,MySQL如何實(shí)現(xiàn)多個(gè)MySQL數(shù)據(jù)庫(kù)更新的一致性呢?那就是MySQL XA。MySQL正是靠支持XA規(guī)范的二階段提交協(xié)議,才實(shí)現(xiàn)了多個(gè)數(shù)據(jù)庫(kù)的操作。

XA 協(xié)議

提到XA規(guī)范就得來(lái)聊一下DTP模型(Distributed Transaction Processing)。XA規(guī)范就是約定DTP模型中的兩個(gè)模塊事務(wù)管理器和資源管理器的通訊方式。DTP其實(shí)就是分布式事務(wù)處理

在這里插入圖片描述

各個(gè)模塊的作用如下:

  • AP(Application Program):應(yīng)用程序,定義事務(wù)邊界(定義事務(wù)開(kāi)始和結(jié)束)并訪問(wèn)事務(wù)邊界內(nèi)的資源。
  • RM(Resource Manger)資源管理器: 管理共享資源并提供外部訪問(wèn)接口。供外部程序來(lái)訪問(wèn)數(shù)據(jù)庫(kù)等共享資源。此外,RM還具有事務(wù)的回滾能力。
  • TM(Transaction Manager)事務(wù)管理器:TM是分布式事務(wù)的協(xié)調(diào)者,TM與每個(gè)RM進(jìn)行通信,負(fù)責(zé)管理全局事務(wù),分配事務(wù)唯一標(biāo)識(shí),監(jiān)控事務(wù)的執(zhí)行進(jìn)度,并負(fù)責(zé)事務(wù)的提交、回滾、失敗恢復(fù)等。

剛開(kāi)始看可能覺(jué)得不好理解,總結(jié)起來(lái)該架構(gòu)就是應(yīng)用程序訪問(wèn)及使用資環(huán)管理器提供的共享資源,通過(guò)事務(wù)管理器提供的事務(wù)接口(TX interface)定義事務(wù)操作。事務(wù)管理器和資源管理會(huì)基于XA規(guī)范執(zhí)行二階段提交協(xié)議。
XA規(guī)范流程如下圖所示

在這里插入圖片描述

  • 應(yīng)用程序AP向事務(wù)管理器TM發(fā)起事務(wù)請(qǐng)求
  • TM調(diào)用xa_open()建立同資源管理器的會(huì)話
  • TM調(diào)用xa_start()標(biāo)記一個(gè)事務(wù)分支的開(kāi)頭
  • AP訪問(wèn)資源管理器RM并定義操作,比如插入記錄操作
  • TM調(diào)用xa_end()標(biāo)記事務(wù)分支的結(jié)束
  • TM調(diào)用xa_prepare()通知RM做好事務(wù)分支的提交準(zhǔn)備工作。其實(shí)就是二階段提交的提交請(qǐng)求階段。
  • TM調(diào)用xa_commit()通知RM提交事務(wù)分支,也就是二階段提交的提交執(zhí)行階段。
  • TM調(diào)用xa_close管理與RM的會(huì)話。
    • 這些接口一定要按順序執(zhí)行,比如xa_start接口一定要在xa_end之前。此外,這里千萬(wàn)要注意的是事務(wù)管理器只是標(biāo)記事務(wù)分支并不執(zhí)行事務(wù),事務(wù)操作最終是由應(yīng)用程序通知資源管理器完成的。另外,我們來(lái)總結(jié)下XA的接口
  • xa_start:負(fù)責(zé)開(kāi)啟或者恢復(fù)一個(gè)事務(wù)分支,并且管理XID到調(diào)用線程
  • xa_end:負(fù)責(zé)取消當(dāng)前線程與事務(wù)分支的關(guān)系
  • xa_prepare:負(fù)責(zé)詢問(wèn)RM 是否準(zhǔn)備好了提交事務(wù)分支 xa_commit:通知RM提交事務(wù)分支
  • xa_rollback:通知RM回滾事務(wù)分支

如何通過(guò)MySQL XA實(shí)現(xiàn)分布式事務(wù)

Mysql中存在兩種XA事務(wù),一種是內(nèi)部XA事務(wù)主要用來(lái)協(xié)調(diào)存儲(chǔ)引擎和二進(jìn)制日志,一種是外部事務(wù)可以參與到外部分布式事務(wù)中(比如多個(gè)數(shù)據(jù)庫(kù)實(shí)現(xiàn)的分布式事務(wù)),這里我們主要討論外部事務(wù)。

注:MySQL中只有當(dāng)隔離級(jí)別設(shè)置為Serializable的時(shí)候才能使用分布式事務(wù)。
MySQL的XA語(yǔ)法如下

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作為事務(wù)ID,唯一表示一個(gè)事務(wù)分支,每個(gè)事務(wù)分支都有一個(gè)id。
首先要確認(rèn)是否開(kāi)啟了XA 功能

在這里插入圖片描述

設(shè)置隔離級(jí)別為serializable

在這里插入圖片描述

執(zhí)行結(jié)果

在這里插入圖片描述

首先調(diào)用“XA START ‘xid' ”命令把XA事務(wù)置于ACTIVATE狀態(tài),接著執(zhí)行構(gòu)成事務(wù)的多條SQL語(yǔ)句(比如 update
t1 set c1 = ‘a(chǎn)' where id=1),也就是指定事務(wù)的邊界。然后調(diào)用“XA END ‘xid' ”把事務(wù)放入IDLE狀態(tài),也就是結(jié)束事務(wù)邊界。

在這里插入圖片描述

接著,對(duì)于一個(gè)處于IDLE狀態(tài)的XA事務(wù),可以執(zhí)行“XA PREPARE”命令或一個(gè)“XA COMMIT…ONE PHASE”命令,XA
PREPARE來(lái)執(zhí)行二階段提交協(xié)議的提交請(qǐng)求階段。執(zhí)行“XA RECOVER”命令會(huì)列出處于PREPARED狀態(tài)的所有XA事務(wù)。XA
COMMIT…ONE PHASE用于預(yù)備和提交事務(wù),也就是轉(zhuǎn)換為一階段協(xié)議,直接提交事務(wù)。

在這里插入圖片描述

最后,調(diào)用“XA COMMIT”來(lái)提交事務(wù)(或者“XA ROLLBACK”回滾事務(wù))。這樣就實(shí)現(xiàn)了全局事務(wù)的一致性了。

在這里插入圖片描述

通過(guò)上面的流程可以看到,在MySQL數(shù)據(jù)庫(kù)分布式事務(wù)中,MySQL的角色其實(shí)是XA事務(wù)過(guò)程中的RM,TM是連接MySQL服務(wù)器的客戶端。在分布式事務(wù)中一般會(huì)涉及到至少兩個(gè)RM,所以我們說(shuō)的MySQL支持XA協(xié)議是說(shuō)mysql作為RM來(lái)說(shuō)的,也就是說(shuō)MySQL實(shí)現(xiàn)了XA協(xié)議中RM應(yīng)該具有的功能。

到此這篇關(guān)于一文搞懂MySQL XA如何實(shí)現(xiàn)分布式事務(wù)的文章就介紹到這了,更多相關(guān)MySQL XA分布式事務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ?MySQL中?between and的基本用法?操作方法

    ?MySQL中?between and的基本用法?操作方法

    本文主要介紹了MySQL中BETWEEN AND操作符的基本用法,包括數(shù)值查詢和時(shí)間范圍查詢,同時(shí)還詳細(xì)解釋了NOT BETWEEN AND的使用方法,并通過(guò)實(shí)例進(jìn)行了詳細(xì)的演示,其中,BETWEEN AND可以用于數(shù)值、日期等類型的字段,包括邊界值
    2024-10-10
  • mysql中的delete,drop和truncate有什么區(qū)別

    mysql中的delete,drop和truncate有什么區(qū)別

    這篇文章主要介紹了mysql中的delete,drop和truncate有什么區(qū)別,三者的用法和使用場(chǎng)景又完全不同,接下來(lái)我們來(lái)看看具體的區(qū)別吧,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-06-06
  • Mysql help命令(幫助信息)中文注解

    Mysql help命令(幫助信息)中文注解

    這篇文章主要介紹了Mysql help命令(幫助信息)中文注解,英文不好的同學(xué)可以收藏起來(lái)了,非常好的一篇中文翻譯文章,需要的朋友可以參考下
    2014-09-09
  • MySQL中delimiter關(guān)鍵字的使用解讀

    MySQL中delimiter關(guān)鍵字的使用解讀

    這篇文章主要介紹了MySQL中delimiter關(guān)鍵字的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • MySQL索引操作命令小結(jié)

    MySQL索引操作命令小結(jié)

    這篇文章主要介紹了MySQL索引操作命令小結(jié),本文講解了創(chuàng)建索引、查詢索引、刪除索引等內(nèi)容,需要的朋友可以參考下
    2014-12-12
  • 詳解Mysql雙機(jī)熱備和負(fù)載均衡的實(shí)現(xiàn)步驟

    詳解Mysql雙機(jī)熱備和負(fù)載均衡的實(shí)現(xiàn)步驟

    MySQL數(shù)據(jù)庫(kù)沒(méi)有增量備份的機(jī)制,但它提供了一種主從備份的機(jī)制,就是把主數(shù)據(jù)庫(kù)的所有的數(shù)據(jù)同時(shí)寫到備份數(shù)據(jù)庫(kù)中。這篇文章主要介紹了Mysql的雙機(jī)熱備和負(fù)載均衡,需要的朋友可以參考下
    2019-10-10
  • mysql中自增auto_increment功能的相關(guān)設(shè)置及問(wèn)題

    mysql中自增auto_increment功能的相關(guān)設(shè)置及問(wèn)題

    mysql中的自增auto_increment功能相信每位phper都用過(guò),本文就為大家分享一下mysql字段自增功能的具體查看及設(shè)置方法
    2012-12-12
  • MySQL/MariaDB中如何支持全部的Unicode

    MySQL/MariaDB中如何支持全部的Unicode

    MySQL/MariaDB中,utf8字符集并不是對(duì)Unicode的真正實(shí)現(xiàn),那么MySQL/MariaDB中如何支持全部的Unicode,感興趣的朋友可以了解一下
    2021-08-08
  • mysql 讀寫分離(基礎(chǔ)篇)

    mysql 讀寫分離(基礎(chǔ)篇)

    MySQL Proxy最強(qiáng)大的一項(xiàng)功能是實(shí)現(xiàn)“讀寫分離(Read/Write Splitting)”。
    2009-04-04
  • MySQL安全刪除binlog日志的詳細(xì)步驟

    MySQL安全刪除binlog日志的詳細(xì)步驟

    如果你的?Mysql?搭建了主從同步,或者數(shù)據(jù)庫(kù)開(kāi)啟了log-bin日志,那么隨著時(shí)間的推移,你的數(shù)據(jù)庫(kù)data目錄下會(huì)產(chǎn)生大量的日志文件,下面這篇文章主要給大家介紹了關(guān)于MySQL安全刪除binlog日志的詳細(xì)步驟,需要的朋友可以參考下
    2024-02-02

最新評(píng)論

曲靖市| 金门县| 固原市| 安远县| 伊宁市| 安陆市| 来宾市| 石河子市| 玛多县| 封开县| 广南县| 嫩江县| 金门县| 安庆市| 云安县| 香格里拉县| 九龙坡区| 孝昌县| 海宁市| 若尔盖县| 唐山市| 喀喇沁旗| 化德县| 平凉市| 库车县| 丰原市| 陆良县| 呼图壁县| 佛坪县| 航空| 连平县| 公主岭市| 平遥县| 深水埗区| 陇南市| 当阳市| 久治县| 枣庄市| 赞皇县| 汉寿县| 建宁县|