Mysql對(duì)XA的支持

mysql8.0文檔:https://dev.mysql.com/doc/refman/8.0/en/xa-statements.html。13.3.8.1 XA Transaction SQL Syntax章節(jié)講述了Mysql對(duì)于XA事務(wù)的語法。

XA {START|BEGIN} xid [JOIN|RESUME] XA END xid [SUSPEND [FOR MIGRATE]] XA PREPARE xid XA COMMIT xid [ONE PHASE] XA ROLLBACK xid XA RECOVER [CONVERT XID]

首先赵辕,根據(jù)DTP(Distributed Transaction Processing: Reference Model)參考模型中废亭,Mysql是作為資源管理器這一組件邻遏。所以Mysql也僅僅是作為XA規(guī)范中的一個(gè)組件而已酿箭,Mysql對(duì)于XA的支持栏笆,其實(shí)是提供了RMs與TM之間的接口交互支持森渐。TM(Transaction manager)是一個(gè)事務(wù)的協(xié)調(diào)者做入,協(xié)調(diào)眾多的事務(wù)參與者。明白了這一點(diǎn)以后同衣,我們?cè)賮砜碝ysql中使用XA事務(wù)的語法竟块,mysql官方文檔中也有詳細(xì)的描述,我們?cè)谙旅媪信e一二耐齐,另外關(guān)于mysql支持XA是從什么版本開始浪秘,以及java驅(qū)動(dòng)包什么版本支持XA,請(qǐng)見以下文檔原文

Support for XA transactions is available for the

InnoDB

storage engine. The MySQL XA implementation is based on the X/Open CAE document?Distributed Transaction Processing: The XA Specification. This document is published by The Open Group and available athttp://www.opengroup.org/public/pubs/catalog/c193.htm. Limitations of the current XA implementation are described in Section C.6, “Restrictions on XA Transactions”.

innodb存儲(chǔ)引擎支持XA事務(wù)

Among the MySQL Connectors, MySQL Connector/J 5.0.0 and higher supports XA directly, by means of a class interface that handles the XA SQL statement interface for you.

5.0.0版本mysql連接驅(qū)動(dòng)開始支持XA

XA事務(wù)命令都是XA開頭的埠况,xa start 和 xa begin 都可以開啟一個(gè)xa事務(wù)耸携,但是xa start 不支持join 、resume辕翰,這兩個(gè)是什么违帆,我暫時(shí)不了解,暫且不管金蜀,xa start 還需要跟一個(gè)xid刷后,這個(gè)是事務(wù)的唯一標(biāo)識(shí)的畴,關(guān)于xid的構(gòu)成,下面再詳述尝胆,這里僅需要知道xid是一個(gè)事務(wù)的id標(biāo)識(shí)即可丧裁。

xa end xid,即完成sql 操作后含衔,讓xa事務(wù)進(jìn)入IDLE狀態(tài)的命令煎娇,同樣要指明xid,操作的是哪個(gè)XA事務(wù)贪染,注意這里xa end并不是要結(jié)束xa事務(wù)缓呛,只是進(jìn)入到IDLE狀態(tài),后續(xù)還有兩階段提交過程杭隙,prepare和commit哟绊;

xa prepare xid ,標(biāo)識(shí)兩階段提交的第一個(gè)提交階段痰憎,通知資源管理器RM做提交前的準(zhǔn)備票髓,防止數(shù)據(jù)丟失,之前討論兩階段提交時(shí)已經(jīng)講了铣耘,這個(gè)階段洽沟,mysql就會(huì)記錄下這個(gè)事務(wù)的各種日志,防止丟失蜗细,即使宕機(jī)重啟也能恢復(fù)裆操。prepare結(jié)束就具備了這種恢復(fù)的能力,RM prepare回復(fù)TM炉媒,prepare成功后跷车,RM會(huì)等TM的commit通知,而TM要等所有RM的成功消息橱野,所有RM回復(fù)成功朽缴,TM就下發(fā)commit給所有RM;如果部分RM回復(fù)不成功水援,那么TM就下發(fā)rollback給所有RM回滾事務(wù)密强。

xa rollback xid就是回滾事務(wù)的指令,xa commit xid就是提交事務(wù)的指令蜗元,xa commit xid ONE PHASE 是明確知道RM只有一個(gè)的情況下或渤,采用一階段提交的方式,這種情況下就不需要prepare階段了奕扣,xa end后即可xa commit xid ONE PHASE了薪鹦。

xa recover ,是用來查看哪些xid已經(jīng)完成prepare的,異常宕機(jī)情況下池磁,xa recover也能列出宕機(jī)前哪些xa事務(wù)完成prepare奔害,等待commit的。

xid: gtrid [, bqual [, formatID ]]

以上是xid的構(gòu)成地熄,gtrid全局事務(wù)id標(biāo)識(shí)华临,然后bqual 事務(wù)分支標(biāo)識(shí),formatID是格式標(biāo)識(shí)端考,具體什么用處暫時(shí)不明白雅潭。bqual和formatID都是可選,如果不給值時(shí)默認(rèn)值分別為”和1.

gtrid 和 bqual 都必須是字符串類型却特,長(zhǎng)度是64byte扶供,formatID是無符號(hào)整型。

我們來看個(gè)實(shí)際例子

我建立了一個(gè)全局事務(wù)aaa裂明,兩個(gè)分支事務(wù)bbb和ccc椿浓。然后兩個(gè)分支事務(wù)都進(jìn)入了prepare,從分支事務(wù)ccc截圖中xa recover可以看出漾岳。但是ccc回滾,bbb提交粉寞。最開始理解這塊的時(shí)候尼荆,我認(rèn)為既然一個(gè)全局事務(wù),那么怎么能夠一個(gè)回滾一個(gè)提交呢唧垦?后來仔細(xì)一想捅儒,這個(gè)過程應(yīng)該是交給TM來統(tǒng)一的,mysql支持XA并不體現(xiàn)在控制全局事務(wù)下所有子事務(wù)一致提交振亮,而是提供和TM交互的接口巧还,由TM最終來控制,通知所有子事務(wù)提交坊秸,或都回滾麸祷,而不會(huì)通知部分提交、部分回滾褒搔。

編程的方式使用XA事務(wù)和以上方式類似阶牍,后面有空整理出代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市星瘾,隨后出現(xiàn)的幾起案子走孽,更是在濱河造成了極大的恐慌,老刑警劉巖琳状,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件磕瓷,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)困食,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門边翁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人陷舅,你說我怎么就攤上這事倒彰。” “怎么了莱睁?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵待讳,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我仰剿,道長(zhǎng)创淡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任南吮,我火速辦了婚禮琳彩,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘部凑。我一直安慰自己露乏,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布涂邀。 她就那樣靜靜地躺著瘟仿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪比勉。 梳的紋絲不亂的頭發(fā)上劳较,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音浩聋,去河邊找鬼观蜗。 笑死,一個(gè)胖子當(dāng)著我的面吹牛衣洁,可吹牛的內(nèi)容都是我干的墓捻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼坊夫,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼毙替!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起践樱,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤厂画,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后拷邢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袱院,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忽洛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腻惠。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖欲虚,靈堂內(nèi)的尸體忽然破棺而出集灌,到底是詐尸還是另有隱情,我是刑警寧澤复哆,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布欣喧,位于F島的核電站,受9級(jí)特大地震影響梯找,放射性物質(zhì)發(fā)生泄漏唆阿。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一锈锤、第九天 我趴在偏房一處隱蔽的房頂上張望驯鳖。 院中可真熱鬧,春花似錦久免、人聲如沸浅辙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽记舆。三九已至,卻和暖如春丁寄,著一層夾襖步出監(jiān)牢的瞬間氨淌,已是汗流浹背泊愧。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國打工伊磺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人删咱。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓屑埋,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親痰滋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子摘能,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 五、MySQL 中基于 XA 實(shí)現(xiàn)的分布式事務(wù) 5.1 XA協(xié)議 首先我們來簡(jiǎn)要看下分布式事務(wù)處理的XA規(guī)范 可知...
    阿里加多閱讀 8,023評(píng)論 0 9
  • 引言 在MySQL 5.7.7版本中敲街,Oracle 官方將MySQL XA 一直存在的一個(gè)“bug” 進(jìn)行了修復(fù)团搞,...
    foreversunyao閱讀 18,735評(píng)論 2 14
  • 初識(shí)Open/X XA XA是DTP的一部分接口規(guī)范。 Distributed Transaction Proce...
    john_zhong閱讀 6,739評(píng)論 1 6
  • MySQL分布式事務(wù)介紹 InnoDB存儲(chǔ)引擎提供了對(duì)XA事務(wù)的支持多艇,并通過XA事務(wù)來支持分布式事務(wù)的實(shí)現(xiàn)逻恐。分布式...
    張偉科閱讀 9,149評(píng)論 0 10
  • 1、事務(wù)簡(jiǎn)介 ? 事務(wù)(Transaction)是訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(u...
    逗逼程序員閱讀 679評(píng)論 0 1