MySQL-數據庫分布式XA事務

準備

innodb存儲引擎開啟支持分布式事務

set global innodb_support_ax=on

MySQL數據庫XA事務的SQL語法如下:

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


完整```groovy
xa start gtrid, bqual, formatId; 
xa end gtrid, bqual, formatId;
xa prepare gtrid, bqual, formatId;
xa commit gtrid, bqual, formatId;

bqual: 默認為空
formatId:默認為1

xa start 'a';
insert into z(`a`,`b`,`c`) select 100,2,100
xa end 'a';
xa prepare 'a';
xa recover;
xa commit 'a';

1. XA START 'a';

  • 作用:開始一個新的XA事務,并分配一個唯一的事務ID 'a'
  • 說明:在這個命令之后,所有后續的SQL操作都會被包含在這個XA事務中,直到遇到XA END命令。

2. insert into z(a,b,c) select 100,2,100;

  • 作用:執行一條插入語句,將值(100, 2, 100)插入到表z中。
  • 說明:這條語句是在XA事務上下文中執行的,這意味著如果最終XA事務沒有成功提交,這個插入操作也不會對數據庫產生實際影響。

3. XA END 'a';

  • 作用:標記XA事務'a'的操作結束。
  • 說明:這并不意味著事務已經完成或提交,它只是表明當前事務不再接受新的操作。在XA END之后,不能再對該事務進行任何修改操作。

4. XA PREPARE 'a';

  • 作用:準備XA事務'a',使其進入預備狀態。
  • 說明:這是兩階段提交(2PC, Two-Phase Commit)的第一階段。在這個階段,所有參與的資源管理器會投票決定是否可以安全地提交該事務。如果所有參與者都準備好提交,則可以進入下一階段;如果有任何一個參與者不能準備好,則整個事務會被回滾。

5. XA RECOVER;

  • 作用:列出所有處于預備狀態但尚未完成提交或回滾的XA事務。
  • 說明:這個命令對于恢復未完成的XA事務非常有用,特別是在系統崩潰后需要手動干預來解決懸掛事務時。

6. XA COMMIT 'a';

  • 作用:提交XA事務'a'
  • 說明:這是兩階段提交的第二階段。只有當所有參與的資源管理器都已準備好(通過XA PREPARE),并且沒有任何錯誤發生時,才會執行此命令。提交后,所有更改將永久保存到數據庫中。

當如下代碼:

xa start 'a';insert into z(`a`,`b`,`c`) select 100,2,100
xa end 'a';
xa prepare 'a';
//不進行提交xa commit 'a';

可看懸掛的分布式事物列表:

xa recover;

在這里插入圖片描述

  • gtrid_length: gtrid字符的長度,按字節計算。
  • bqual_length: bqual字符的長度,按字節計算。

提交或者回滾的方式:

xa commit 'a'xa rollback 'a'

改變gtrid長度

xa start 'aaa';
insert into z(`a`,`b`,`c`) select 100,2,100
xa end 'aaa';
xa prepare 'aaa';

在這里插入圖片描述
提交或者回滾的方式:

xa commit 'aaa'
xa rollback'aaa'

改變gtrid長度和bqual長度

xa start 'aaa','bbb';
insert into z(`a`,`b`,`c`) select 100,2,100
xa end 'aaa','bbb';
xa prepare 'aaa','bbb';

在這里插入圖片描述
提交或者回滾的方式:

xa commit 'aaa','bbbb'xa rollback'aaa','bbbb'

改變gtrid長度、bqual長度、formatId值

xa start 'aaa','bbb', 100;
insert into z(`a`,`b`,`c`) select 100,2,100
xa end 'aaa','bbb', 100;
xa prepare 'aaa','bbb', 100

在這里插入圖片描述提交的方式:
提交或者回滾的方式:

xa commit 'aaa','bbbb',100xa rollback'aaa','bbbb',100

總結

這段腳本演示了一個完整的XA事務流程:

  1. 開始一個新的XA事務。
  2. 執行一些數據庫操作(在這里是一個插入操作)。
  3. 結束XA事務的操作部分。
  4. 準備XA事務以供提交。
  5. 檢查是否有任何未完成的XA事務(雖然在這個例子中看起來不太必要,但在實際應用中可用于故障恢復)。
  6. 最終提交XA事務,使所有更改生效。

這種機制特別適用于需要跨多個數據庫或其他資源管理器保持一致性的場景,例如銀行轉賬、電子商務訂單處理等。然而,XA事務也有其局限性,比如性能開銷較大,因為它涉及到更多的協調步驟,并且可能會導致阻塞問題。因此,在設計系統時需要權衡使用XA事務的成本與收益。

java實現分布式事務代碼實例

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/80992.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80992.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/80992.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SAP 運維-冷門問題解決辦法

1.SAP Fiori幫助菜單鏈接如何配置? 答: 執行事務代碼HELP_CONFIG,選擇對應的Fiori部署模式,配置幫助菜單下的URL鏈接。 檢查配置的幫助菜單,執行事務代碼/N//UI2/FLP_CUS_CONF 或者SR13進行查看配置狀態與修改。

新型智慧園區技術架構深度解析:數字孿生與零碳科技的融合實踐

🏭在杭州亞運村零碳園區,光伏板與氫燃料大巴構成的能源網絡,正通過數字孿生技術實現智能調度。這不僅是格力電器與龍源電力在新能源領域的創新實踐,更是智慧園區4.0時代的標桿案例。當AI算法開始接管能源調度,當BIM建模…

Java轉Go日記(三十六):簡單的分布式

1.1.1. 簡單的分布式server 目前分布式系統已經很流行了,一些開源框架也被廣泛應用,如dubbo、Motan等。對于一個分布式服務,最基本的一項功能就是服務的注冊和發現,而利用zk的EPHEMERAL節點則可以很方便的實現該功能。EPHEMERAL節…

機器學習筆記——特征工程

大家好,這里是好評筆記,公主號:Goodnote,專欄文章私信限時Free。本筆記介紹機器學習中常見的特征工程方法、正則化方法和簡要介紹強化學習。 文章目錄 特征工程(Fzeature Engineering)1. 特征提取&#xff…

在 Ubuntu 20.04.6 LTS 中將 SCons 從 3.1.2 升級到 4.9.1

在 Ubuntu 20.04.6 LTS 中將 SCons 從 3.1.2 升級到 4.9.1,可以通過以下步驟完成: 方法 1:使用 pip 安裝(推薦) 步驟 1:卸載舊版本 SCons # 如果通過 apt 安裝的舊版本,先卸載 sudo apt remov…

LeetCode熱題100--234.回文鏈表--簡單

1. 題目 給你一個單鏈表的頭節點 head ,請你判斷該鏈表是否為回文鏈表。如果是,返回 true ;否則,返回 false 。 示例 1: 輸入:head [1,2,2,1] 輸出:true 示例 2: 輸入&#xf…

【markdown】介紹如何在markdown中繪制流程圖

在 Markdown 中編寫流程圖主要通過 ??Mermaid 語法??實現(多數平臺如 GitHub、VS Code、Typora 已原生支持)。以下是詳細方法: 1. 基礎流程圖?? 語法結構 用 mermaid 包裹代碼塊,指定方向后定義節點和連接線&#xff1a…

Java中使用自定義序列化器:自動添加View字段的實現與應用

Java 中 BigDecimal 序列化器:自動添加 View 返回字段的實現與應用 在 Java 開發過程中,數據的序列化與反序列化是非常重要的環節。當我們處理數值類型數據,特別是BigDecimal類型時,有時需要在序列化輸出中添加額外的視圖字段,以滿足前端展示或者特定業務需求。本文將通過…

Java類一文分解:JavaBean,工具類,測試類的深度剖析

解鎖Java類的神秘面紗:從JavaBean到測試類的深度剖析 前言一、JavaBean 類:數據的守護者(一)JavaBean 類是什么(二)JavaBean 類的特征(三)JavaBean 類的使用場景(四&…

機器學習-- 線性回歸、邏輯回歸

線性回歸 線性回歸是一種統計方法,用于發現變量之間的關系。在機器學習背景下,線性回歸可找出特征(Feature)與標簽(Lable)之間的關系。 例如,假設我們想要根據汽車的重量預測汽車的每加侖汽油行駛里程(mpg),并且我們有以下數據集: 線性回歸方程 Linear regressi…

Lua再學習

因為實習的項目用到了Lua,所以再來深入學習一下 函數 函數的的多返回值 Lua中的函數可以實現多返回值,實現方法是再return后列出要返回的值的列表,返回值也可以通過變量接收到,變量不夠也不會影響接收對應位置的返回值 Lua中傳…

TCP協議十大核心特性深度解析:構建可靠傳輸的基石

TCP(傳輸控制協議)作為互聯網的"交通指揮官",承載著全球80%以上的網絡流量。本文將深入解析TCP協議的十大核心特性,通過原理剖析、流程圖解和實戰案例,揭示其如何實現高效可靠的數據傳輸。 一、面向連接的可…

基于 Spring Boot 瑞吉外賣系統開發(十三)

基于 Spring Boot 瑞吉外賣系統開發(十三) 查詢套餐 在查詢套餐信息時包含套餐的分類名,分類名稱在category表中,因此這里需要進行兩表關聯查詢。 自定義SQL如下: select s.* ,c.name as category_name from setmeal…

華為IP(6)

VLAN聚合 VLAN聚合產生的技術背景 在一般是三層交換機中,通常采用一個VLAN接口的方式實現廣播域之間的互通,這在某些情況下導致了IP地址的浪費 因為一個VLAN對應的子網中,子網號、子網廣播地址、子網網關地址不能用作VLAN內的主機IP地址&a…

深度解析IP靜態的工作原理,IP靜態的應用場景又哪些?

一、什么是IP靜態? 當我們談到“IP靜態”時,大家可能首先想到的是與“動態IP”相對的概念。確實如此,靜態IP是一種固定分配的IP地址,也就是說,在特定時間內,分配給你的IP地址不會有所更改——無論你完成多…

docker(四)使用篇一:docker 鏡像倉庫

前文我們已經介紹了 docker 并安裝了 docker,下面我們將正式步入使用環節,本章是第一個使用教學:docker 鏡像倉庫。 一、什么是鏡像倉庫 所謂鏡像倉庫,其實就是負責存儲、管理和分發鏡像的倉庫,并且建立了倉庫的索引…

單片機開發軟件

目錄 純編碼 vscode Ardunio Keil 1. 集成化開發環境(IDE) 2. 多架構芯片支持 3. 高效的代碼生成與優化 4. 強大的調試與仿真功能 5. 豐富的庫函數與生態系統 6. 教育與企業級適用性 典型應用場景 半編碼半圖形化 STM32CUBEIED 1. 圖形化配置…

【虛幻引擎】UE5獨立游戲開發全流程(商業級架構)

本套課程我將會講解一下知識 1.虛幻引擎的常用功能節點、模塊包含但不限于動畫模塊、UI模塊、AI模塊、碰撞模塊、傷害模塊、背包模塊、準心模塊、武器模塊、可拾取物品模塊、死亡等模塊。 2.整個游戲的設計思路(游戲架構),本套教程講解了如…

ABP-Book Store Application中文講解 - Part 2: The Book List Page

本章用于介紹如何創建Book List Page。 TBD 1. 匯總 ABP-Book Store Application中文講解-匯總-CSDN博客 2. 前一章 ABP-Book Store Application中文講解 - Part 1: Creating the Server Side 項目之間的引用關系。 目錄 1. 多語言配置 1.1 zh-Hans.json 1.2 en.jso…

6、登錄功能后端開發

6、登錄功能后端開發 https://xiaoxueblog.com/ai/%E7%99%BB%E5%BD%95%E5%8A%9F%E8%83%BD%E5%90%8E%E7%AB%AF%E5%BC%80%E5%8F%91.html 1、新建用戶表SQL腳本 -- CREATE DATABASE aicloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;-- 創建用戶表 drop table if exi…