日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL數據庫是如何實現XA規范的

瀏覽:18日期:2023-10-06 18:18:41
MySQL 的一致性日志

如果 MySQL 數據庫斷電了,未提交的事務怎么辦?

答案:依靠日志。

因為在執行一個操作之前,數據庫會首先把這個操作的內容寫入到文件系統日志里,然后再進行操作。當宕機或者斷電的時候,即使操作并沒有執行完,但是日志在操作前就已經寫好了,我們仍然可以根據日志的內容來進行恢復。

MySQL InnoDB 引擎中和一致性相關的有重做日志(redo log)、回滾日志(undo log)和二進制日志(binlog)。

redo log

每當有操作執行前,在數據真正更改前會先把相關操作寫入 redo 日志。這樣當發生斷電等意外導致后續任務無法完成時,待系統恢復后就可以繼續完成這些更改。

undo log

和 redo 日志對應,也叫撤消日志,記錄事務開始前數據的狀態。

當一些更改在執行一半時發生意外而無法完成,就可以根據撤消日志恢復到更改之前的狀態。

舉個例子,事務 T1 更新數據 X,對 X 執行 Update 操作,從 10 更新到 20,對應的 Redo 日志為 <T1, X, 20>,Undo 日志為 <T1, X, 10>。

binlog

是 MySQL sever 層維護的一種二進制日志,MySQL 最重要的日志之一,它記錄了所有的 DDL 和 DML 語句,除了數據查詢語句 select、show 等,還包含語句所執行的消耗時間。

binlog 與 InnoDB 引擎中的 redo/undo log 不同,主要目的是復制和恢復,用來記錄對 MySQL 數據更新或潛在發生更新的 SQL 語句,并以事務日志的形式保存在磁盤中。

binlog 主要應用在 MySQL 的主從復制過程中,MySQL 集群在 Master 端開啟 binlog,Master 把它的二進制日志傳遞給 slaves 節點,再從節點回放來達到 master-slave 數據一致的目的。

你可以連接到 MySQL 服務器,使用下面的命令查看真實的 binlog 數據:

//查看binlog文件的內容show binlog events;//查看指定binlog文件的內容show binlog events in ’MySQL-bin.000001’;//查看正在寫入的binlog文件show master statusG //獲取binlog文件列表show binary logs;XA 規范是如何定義的

XA 是由 X/Open 組織提出的分布式事務規范,XA 規范主要定義了事務協調者(Transaction Manager)和資源管理器(Resource Manager)之間的接口。

MySQL數據庫是如何實現XA規范的

事務協調者(Transaction Manager)

因為 XA 事務是基于兩階段提交協議的,所以需要有一個協調者,來保證所有的事務參與者都完成了準備工作,也就是 2PC 的第一階段。

如果事務協調者收到所有參與者都準備好的消息,就會通知所有的事務都可以提交,也就是 2PC 的第二階段。

之所以需要引入事務協調者,是因為在分布式系統中,兩臺機器理論上無法達到一致的狀態,需要引入一個單點進行協調。

資源管理器(Resource Manager)

負責控制和管理實際資源,比如數據庫或 JMS 隊列。

目前,主流數據庫都提供了對 XA 的支持,在 JMS 規范中,即 Java 消息服務(Java Message Service)中,也基于 XA 定義了對事務的支持。

XA 事務的執行流程

XA 事務是兩階段提交的一種實現方式,根據 2PC 的規范,XA 將一次事務分割成了兩個階段,即 Prepare 和 Commit 階段。

Prepare 階段

TM 向所有 RM 發送 prepare 指令,RM 接受到指令后,執行數據修改和日志記錄等操作,然后返回可以提交或者不提交的消息給 TM。

如果事務協調者 TM 收到所有參與者都準備好的消息,會通知所有的事務提交,然后進入第二階段。

Commit 階段

TM 接受到所有 RM 的 prepare 結果,如果有 RM 返回是不可提交或者超時,那么向所有 RM 發送 Rollback 命令。

如果所有 RM 都返回可以提交,那么向所有 RM 發送 Commit 命令,完成一次事務操作。

MySQL 如何實現 XA 規范

MySQL 中 XA 事務有兩種情況,內部 XA 和外部 XA,其區別是事務發生在 MySQL 服務器單機上,還是發生在多個外部節點間上。

內部 XA

在 MySQL 的 InnoDB 存儲引擎中,開啟 binlog 的情況下,MySQL 會同時維護 binlog 日志與 InnoDB 的 redo log,為了保證這兩個日志的一致性,MySQL 使用了 XA 事務,由于是在 MySQL 單機上工作,所以被稱為內部 XA。

內部 XA 事務由 binlog 作為協調者,在事務提交時,則需要將提交信息寫入二進制日志,也就是說,binlog 的參與者是 MySQL 本身。

外部 XA

外部 XA 就是典型的分布式事務,MySQL 支持 XA START/END/PREPARE/Commit 這些 SQL 語句,通過使用這些命令,可以完成分布式事務。

你也可以查看 MySQL 官方文檔,了解更多的 XA 命令。

MySQL 外部 XA 主要應用在數據庫代理層,實現對 MySQL 數據庫的分布式事務支持,例如開源的數據庫中間層,比如淘寶的 TDDL、阿里巴巴 B2B 的 Cobar 等。

外部 XA 一般是針對跨多 MySQL 實例的分布式事務,需要應用層作為協調者,比如我們在寫業務代碼,在代碼中決定提交還是回滾,并且在崩潰時進行恢復。

binlog 中的 Xid

當事務提交時,在 binlog 依賴的內部 XA 中,額外添加了 Xid 結構,binlog 有多種數據類型:

statement 格式,記錄為基本語句,包含 Commit row 格式,記錄為基于行 mixed 格式,日志記錄使用混合格式

不論是 statement 還是 row 格式,binlog 都會添加一個 XID_EVENT 作為事務的結束,該事件記錄了事務的 ID 也就是 Xid,在 MySQL 進行崩潰恢復時根據 binlog 中提交的情況來決定如何恢復。

binlog 同步過程

下面來看看 binlog 下的事務提交過程,整體過程是先寫 redo log,再寫 binlog,并以 binlog 寫成功為事務提交成功的標志。

MySQL數據庫是如何實現XA規范的

當有事務提交時:

InnoDB 進入 Prepare 階段,并且 write/sync redo log,寫 redo log,將事務的 xid 寫入到 redo 日志中,binlog 不作任何操作 進行 write/sync binlog,寫 binlog 日志,也會把 xid 寫入到 binlog 調用 InnoDB 引擎的 commit 完成事務的提交,將 commit 信息寫入到 redo 日志中

如果是在第一步和第二步失敗,則整個事務回滾

如果是在第三步失敗,則 MySQL 在重啟后會檢查 xid 是否已經提交,若沒有提交,也就是事務需要重新執行,就會在存儲引擎中再執行一次提交操作,保障 redo log 和 binlog 數據的一致性,防止數據丟失。

實際執行還牽扯到操作系統緩存 buffer 何時同步到文件系統中,所以 MySQL 支持用戶自定義在 commit 時如何將 log buffer 中的日志刷到 log file 中,通過變量 innodb_flush_log_at_trx_Commit 的值來決定。

在 log buffer 中的內容稱為臟日志,感興趣的話可以查詢資料了解下。

以上就是MySQL數據庫是如何實現XA規范的的詳細內容,更多關于MySQL數據庫XA規范的資料請關注好吧啦網其它相關文章!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本午夜大片a在线观看| 日韩在线第七页| 黄色成人在线网址| 亚洲二区视频| 婷婷丁香综合| 丝袜美腿一区二区三区| 伊人国产精品| 西西人体一区二区| 亚洲成人av观看| 亚洲色图国产| 99成人超碰| 国产精品久久久久久久免费软件| 蜜桃91丨九色丨蝌蚪91桃色| 啪啪国产精品| 麻豆久久久久久| 国产亚洲精品美女久久| 亚洲欧美日本国产专区一区| 亚洲精品一二| 伊人久久高清| 蜜桃久久久久久久| 久久99蜜桃| 日韩视频中文| 久久免费视频66| 99pao成人国产永久免费视频| 欧美日本二区| 亚洲午夜久久久久久尤物| 日韩av电影一区| 成人免费电影网址| 国产欧美成人| 日韩天堂av| 久久丁香四色| 亚洲精品成a人ⅴ香蕉片| 欧美综合国产| 欧美精品中文| 亚州av乱码久久精品蜜桃| 美女网站一区| 日韩美女精品| 日韩免费在线| 亚洲小说欧美另类婷婷| 日韩一区电影| 美女久久99| 日韩高清不卡一区二区| 国产精品一区二区三区www| 综合国产视频| 久久亚洲专区| 日本成人在线一区| 一区在线视频观看| 日韩欧美另类一区二区| 里番精品3d一二三区| 日韩高清一级| 男女性色大片免费观看一区二区 | 在线观看亚洲精品福利片| 成人精品中文字幕| а√在线中文在线新版| 精品精品国产三级a∨在线| 亚洲久久视频| 亚洲一级在线| 日韩视频久久| 丝袜美腿亚洲一区二区图片| 亚洲成人三区| 性欧美精品高清| 亚洲视频电影在线| 日韩国产高清在线| 久久的色偷偷| 亚洲国产成人二区| 久久精品高清| 久久电影一区| 久久国内精品| 免费看av不卡| 樱桃成人精品视频在线播放| 亚洲欧洲一区二区天堂久久| 免费的成人av| 久久久久观看| 婷婷六月综合| 欧美亚洲二区| 国产成人精品一区二区三区免费 | 婷婷精品进入| 亚洲另类av| 国产日韩在线观看视频| 91中文字幕精品永久在线| 成人影视亚洲图片在线| 91精品国产91久久久久久黑人| 激情欧美一区二区三区| 中文字幕一区日韩精品| 国产日韩1区| 欧美日韩三区| 日韩成人亚洲| 91久久久久| av一区在线| 免费久久精品视频| 精品日韩毛片| 久久久精品日韩| 欧美好骚综合网| 精品伊人久久久| 日韩精品免费一区二区夜夜嗨| 精品入口麻豆88视频| 中文字幕一区二区av| 亚洲精品伊人| 国产日韩一区二区三区在线播放| 欧美一区在线观看视频| 蜜桃av一区二区三区电影| 日韩久久一区二区三区| 麻豆久久一区| 精品在线网站观看| 国产精品3区| 国产精品一区二区精品视频观看 | 精品久久亚洲| 国产精品最新| 国产精品极品国产中出| 亚洲一二三区视频| 日韩一区网站| 欧美日本二区| 麻豆精品久久| 国产精品一国产精品| 99热精品在线观看| 九九色在线视频| 九九九精品视频| 精品一区二区三区四区五区| 久久精品国产亚洲aⅴ| 国产色噜噜噜91在线精品| 婷婷综合福利| 男女性色大片免费观看一区二区 | 国内亚洲精品| 中日韩男男gay无套| 999在线观看精品免费不卡网站| 亚洲欧洲高清| 在线亚洲观看| 日韩激情网站| 麻豆高清免费国产一区| zzzwww在线看片免费| 美日韩一区二区三区| 久久不卡国产精品一区二区| 久久精品女人| 六月婷婷一区| 日本欧美一区二区| 国产精品99久久久久久董美香| 美女视频免费精品| 国产一区二区中文| 日本一区二区中文字幕| 美女av一区| 久久99高清| 99精品综合| 亚洲天堂免费| 国产精品久久久久久久久久白浆 | 亚洲免费资源| 日韩在线第七页| 香蕉久久久久久久av网站| 国产乱码精品一区二区三区四区 | 亚洲图片久久| 国产一区二区三区视频在线| 婷婷成人综合| 日韩av福利| 久久av网站| 日韩精品视频中文字幕| 在线成人动漫av| 九九久久国产| 国产欧美日韩一级| 久久成人精品| 亚洲婷婷在线| 久久中文字幕av| 亚洲久久视频| 亚洲美女久久| 亚洲在线久久| 9999国产精品| 在线综合亚洲| 欧美成人精品| 久久精品国产99久久| 日韩高清一区二区| 国产成人精品福利| 久久精品一区二区国产| 国产日韩欧美| 久久中文字幕一区二区| 久久蜜桃资源一区二区老牛| 日日夜夜免费精品视频| 精品国产欧美日韩| 日本美女一区| 亚洲经典在线| 国产精品综合色区在线观看| 91精品啪在线观看国产18| 国产毛片久久| 亚洲精品在线二区| 中文字幕亚洲精品乱码| 免费精品视频最新在线| 久久亚洲影院| 欧美午夜精彩| 午夜精品亚洲| 激情欧美一区| 好看的亚洲午夜视频在线| 久久久久国产| 国内精品福利| 激情综合网五月| 亚洲自啪免费| 视频一区在线视频| 欧美亚洲三区| 最新中文字幕在线播放| 国产在线|日韩| 久久网站免费观看| 日韩精品中文字幕一区二区| 久久国产精品美女| 久久久夜夜夜|