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

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

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

前言

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

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

XA 協(xié)議

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

在這里插入圖片描述

各個模塊的作用如下:

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

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

在這里插入圖片描述

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

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

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

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

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

在這里插入圖片描述

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

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

相關(guān)文章

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

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

    本文主要介紹了MySQL中BETWEEN AND操作符的基本用法,包括數(shù)值查詢和時間范圍查詢,同時還詳細(xì)解釋了NOT BETWEEN AND的使用方法,并通過實(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ū)別,三者的用法和使用場景又完全不同,接下來我們來看看具體的區(qū)別吧,希望對你的學(xué)習(xí)有所幫助
    2022-06-06
  • Mysql help命令(幫助信息)中文注解

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

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

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

    這篇文章主要介紹了MySQL中delimiter關(guān)鍵字的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    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ù)庫沒有增量備份的機(jī)制,但它提供了一種主從備份的機(jī)制,就是把主數(shù)據(jù)庫的所有的數(shù)據(jù)同時寫到備份數(shù)據(jù)庫中。這篇文章主要介紹了Mysql的雙機(jī)熱備和負(fù)載均衡,需要的朋友可以參考下
    2019-10-10
  • mysql中自增auto_increment功能的相關(guān)設(shè)置及問題

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

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

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

    MySQL/MariaDB中,utf8字符集并不是對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ù)庫開啟了log-bin日志,那么隨著時間的推移,你的數(shù)據(jù)庫data目錄下會產(chǎn)生大量的日志文件,下面這篇文章主要給大家介紹了關(guān)于MySQL安全刪除binlog日志的詳細(xì)步驟,需要的朋友可以參考下
    2024-02-02

最新評論

元氏县| 新余市| 黑龙江省| 微博| 简阳市| 河池市| 额敏县| 疏附县| 禹州市| 绍兴县| 广元市| 上饶市| 平陆县| 石嘴山市| 黄平县| 灌云县| 九龙县| 余干县| 江城| 赣榆县| 合江县| 泽州县| 渑池县| 昆明市| 建平县| 红原县| 萨嘎县| 柳州市| 德阳市| 揭阳市| 乃东县| 常山县| 琼中| 开远市| 米泉市| 游戏| 雅安市| 南乐县| 张家川| 宽城| 民勤县|