分布式事務

2021-10-10 02:09:09 字數 1296 閱讀 6408

當前innodb 支援分布式事務。 乙個分布式事務包括多個行動, 而這些行動本身又是乙個事務。 這些行動要麼一起成功, 要麼一起回滾。

乙個分布式事務中的單個事務 又叫做「分支事務」

分支事務作為原子操作, 要麼全部提交, 要麼全部回滾。

個人對分布式事務概念的理解:乙個事務裡面是sql語句集合, 而分布式事務的裡面是 事務。 分布式事務是 事務的集合。 **如下,如果我的理解錯誤歡迎指正。

資源管理器(rm): 資料庫伺服器就是一種資源管理器。

事務管理器(tm): 協調分支事務。 tm與管理每個事務的rm進行通訊。

mysql 執行 xa mysql (比如 xa start 'test','db1'; )的時候, 那麼該伺服器相當於xa事務的資源管理器。 與mysql 伺服器相連的客戶端相當於乙個事務管理器

啟動乙個分布式事務

xa start xid

xid 分布式事務的唯一識別符號。 由客戶端或者伺服器生成。

xid組成: gtrid [,bqual [, formatid]]   比如 『test,db01』

gtrid ; 分布式事務的識別符號, 相同的分布式事務用同乙個gtrid

bqual : 標識分支事務。 對同乙個分布式事務中的分支事務, 它們必須是唯一的。

formatid: 是乙個數字, 用於表示 gtrid 和 bqual 使用的格式。 預設是 1

使得事務進入prepare 狀態

xa end xid [suspend [for migrate]]

xa prepare xid

提交具體的分支事務

xa commit xid [one phase]

回滾具體的分支事務

xa rollback xid

返回當前資料庫中處於prepare 狀態的分支事務的詳細資訊。

存在的問題

事務在prepare 狀態的時候並沒有寫入到binlog 中。

如果分支事務達到 prepare 狀態的時候, 此時資料庫異常重新啟動之後, 依然可以對分支事務進行提交或者回滾, 但是提交後事務是不會寫到binlog 的, 此時會導致主從複製不一致了

分布式 分布式事務

是資料庫執行過程中的乙個邏輯單位,由乙個有限的資料庫操作序列構成。事務的acid四大特性 原子性 atomicity 事務作為乙個整體被執行。一致性 consistency 從乙個一致的狀態轉換到另乙個一致的狀態。隔離性 isolation 多個事務併發執行時,併發事務之間互相影響的程度。永續性 d...

分布式事務 分布式事務的實現

如果在多個服務中需要對不同的資料庫進行操作。因為不同服務操作的資料庫都不同,所以保證在同乙個事務中完成操作顯然是不科學的。那實現分布式事務的思想 1 方法入口,建立一條日誌記錄,狀態定義為初始狀態,即儲存本條日誌記錄 可以儲存在資料庫中,也可以寫出到本地磁碟檔案 2 可以在非同步執行緒或在定時任務中...

分布式之分布式事務

被人問到分布式事務,之前學rabbitmq 的時候學到過rabbitmq 高階的事務,因為沒有用過,所有沒有回答好。這裡總結一下。1.單機版事務。事務的四大特性 acid a.原子性 b.一致性 c.隔離性 d.永續性 單機事務可以通過設定事務的隔離級別 參見spring 的事務隔離級別 2.分布式...