日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql xa_Mysql对XA的支持

發布時間:2025/3/12 数据库 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql xa_Mysql对XA的支持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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]

首先,根據DTP(Distributed Transaction Processing: Reference Model)參考模型中,Mysql是作為資源管理器這一組件。所以Mysql也僅僅是作為XA規范中的一個組件而已,Mysql對于XA的支持,其實是提供了RMs與TM之間的接口交互支持。TM(Transaction manager)是一個事務的協調者,協調眾多的事務參與者。明白了這一點以后,我們再來看Mysql中使用XA事務的語法,mysql官方文檔中也有詳細的描述,我們在下面列舉一二,另外關于mysql支持XA是從什么版本開始,以及java驅動包什么版本支持XA,請見以下文檔原文

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存儲引擎支持XA事務

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連接驅動開始支持XA

XA事務命令都是XA開頭的,xa start 和 xa begin 都可以開啟一個xa事務,但是xa start 不支持join 、resume,這兩個是什么,我暫時不了解,暫且不管,xa start 還需要跟一個xid,這個是事務的唯一標識,關于xid的構成,下面再詳述,這里僅需要知道xid是一個事務的id標識即可。

xa end xid,即完成sql 操作后,讓xa事務進入IDLE狀態的命令,同樣要指明xid,操作的是哪個XA事務,注意這里xa end并不是要結束xa事務,只是進入到IDLE狀態,后續還有兩階段提交過程,prepare和commit;

xa prepare xid ,標識兩階段提交的第一個提交階段,通知資源管理器RM做提交前的準備,防止數據丟失,之前討論兩階段提交時已經講了,這個階段,mysql就會記錄下這個事務的各種日志,防止丟失,即使宕機重啟也能恢復。prepare結束就具備了這種恢復的能力,RM prepare回復TM,prepare成功后,RM會等TM的commit通知,而TM要等所有RM的成功消息,所有RM回復成功,TM就下發commit給所有RM;如果部分RM回復不成功,那么TM就下發rollback給所有RM回滾事務。

xa rollback xid就是回滾事務的指令,xa commit xid就是提交事務的指令,xa commit xid ONE PHASE 是明確知道RM只有一個的情況下,采用一階段提交的方式,這種情況下就不需要prepare階段了,xa end后即可xa commit xid ONE PHASE了。

xa recover ,是用來查看哪些xid已經完成prepare的,異常宕機情況下,xa recover也能列出宕機前哪些xa事務完成prepare,等待commit的。

xid: gtrid [, bqual [, formatID ]]

以上是xid的構成,gtrid全局事務id標識,然后bqual 事務分支標識,formatID是格式標識,具體什么用處暫時不明白。bqual和formatID都是可選,如果不給值時默認值分別為”和1.

gtrid 和 bqual 都必須是字符串類型,長度是64byte,formatID是無符號整型。

我們來看個實際例子

我建立了一個全局事務aaa,兩個分支事務bbb和ccc。然后兩個分支事務都進入了prepare,從分支事務ccc截圖中xa recover可以看出。但是ccc回滾,bbb提交。最開始理解這塊的時候,我認為既然一個全局事務,那么怎么能夠一個回滾一個提交呢?后來仔細一想,這個過程應該是交給TM來統一的,mysql支持XA并不體現在控制全局事務下所有子事務一致提交,而是提供和TM交互的接口,由TM最終來控制,通知所有子事務提交,或都回滾,而不會通知部分提交、部分回滾。

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

總結

以上是生活随笔為你收集整理的mysql xa_Mysql对XA的支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。