麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > mysql group commit為什么要保證binlog和redo log提交的順序一致?

mysql group commit為什么要保證binlog和redo log提交的順序一致?

來源:千鋒教育
發(fā)布人:xqq
時間: 2023-10-13 08:25:24 1697156724

一、為什么要保證binlog和redo log提交的順序一致

MySQL為了保證master和slave的數(shù)據(jù)一致性,就必須保證binlog和InnoDB redo日志的一致性(因為備庫通過二進制日志重放主庫提交的事務,而主庫binlog寫入在commit之前,如果寫完binlog主庫crash,再次啟動時會回滾事務。但此時從庫已經(jīng)執(zhí)行,則會造成主備數(shù)據(jù)不一致)。所以在開啟Binlog后,如何保證binlog和InnoDB redo日志的一致性呢?為此,MySQL引入二階段提交(two phase commit or 2pc),MySQL內(nèi)部會自動將普通事務當做一個XA事務(內(nèi)部分布式事物)來處理:

– 自動為每個事務分配一個少數(shù)的ID(XID)。

– COMMIT會被自動的分成Prepare和Commit兩個階段。

– Binlog會被當做事務協(xié)調(diào)者(Transaction Coordinator),Binlog Event會被當做協(xié)調(diào)者日志。

Binlog在2PC中充當了事務的協(xié)調(diào)者(Transaction Coordinator)。由Binlog來通知InnoDB引擎來執(zhí)行prepare,commit或者rollback的步驟。

事務的提交主要分為兩個主要步驟:

1. 準備階段(Storage Engine(InnoDB) Transaction Prepare Phase)

此時SQL已經(jīng)成功執(zhí)行,并生成xid信息及redo和undo的內(nèi)存日志。然后調(diào)用prepare方法完成名列前茅階段,papare方法實際上什么也沒做,將事務狀態(tài)設為TRX_PREPARED,并將redo log刷磁盤。

2. 提交階段(Storage Engine(InnoDB)Commit Phase)

2.1 記錄協(xié)調(diào)者日志,即Binlog日志。

如果事務涉及的所有存儲引擎的prepare都執(zhí)行成功,則調(diào)用TC_LOG_BINLOG::log_xid方法將SQL語句寫到binlog(write()將binary log內(nèi)存日志數(shù)據(jù)寫入文件系統(tǒng)緩存,fsync()將binary log文件系統(tǒng)緩存日志數(shù)據(jù)永久寫入磁盤)。此時,事務已經(jīng)鐵定要提交了。否則,調(diào)用ha_rollback_trans方法回滾事務,而SQL語句實際上也不會寫到binlog。

2.2 告訴引擎做commit。

最后,調(diào)用引擎的commit完成事務的提交。會清除undo信息,刷redo日志,將事務設為TRX_NOT_STARTED狀態(tài)。

PS:記錄Binlog是在InnoDB引擎Prepare(即Redo Log寫入磁盤)之后,這點至關重要。

由上面的二階段提交流程可以看出,一旦步驟2中的操作完成,就確保了事務的提交,即使在執(zhí)行步驟3時數(shù)據(jù)庫發(fā)送了宕機。此外需要注意的是,每個步驟都需要進行一次fsync操作才能保證上下兩層數(shù)據(jù)的一致性。步驟2的fsync參數(shù)由sync_binlog=1控制,步驟3的fsync由參數(shù)innodb_flush_log_at_trx_commit=1控制,俗稱“雙1”,是保證CrashSAFe的根本。

延伸閱讀:

二、關系型數(shù)據(jù)庫中的數(shù)據(jù)組織

關系型數(shù)據(jù)庫中,數(shù)據(jù)組織涉及到兩個最基本的結構:表與索引。表中存儲的是完整記錄,一般有兩種組織形式:堆表(所有的記錄無序存儲),或者是聚簇索引表(所有的記錄,按照記錄主鍵進行排序存儲)。索引中存儲的是完整記錄的一個子集,用于加速記錄的查詢速度,索引的組織形式,一般均為B+樹結構。

聲明:本站稿件版權均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內(nèi)將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
app的啟動流程都包括哪些步驟?

一、app的啟動流程包括的步驟1、創(chuàng)建進程App發(fā)起進程:當從桌面啟動應用,則發(fā)起進程便是Launcher所在進程;當從某App內(nèi)啟動遠程進程,則發(fā)送進...詳情>>

2023-10-13 10:03:27
怎么理解Mongodb是介于關系型和非關系型的數(shù)據(jù)庫?

一、怎么理解Mongodb是介于關系型和非關系型的數(shù)據(jù)庫MongoDB被稱為介于關系型數(shù)據(jù)庫(RDBMS)和非關系型數(shù)據(jù)庫(NoSQL)之間,這是因為它在以下...詳情>>

2023-10-13 09:55:50
DBeaver怎么保持數(shù)據(jù)庫連接?

一、DBeaver保持數(shù)據(jù)庫連接的方法1、連接到數(shù)據(jù)庫打開DBeaver并選擇連接到您的目標數(shù)據(jù)庫。選擇適當?shù)臄?shù)據(jù)庫類型,輸入必要的連接信息,如主機...詳情>>

2023-10-13 09:05:04
Kettle連接MySQL為什么會報錯?

一、Kettle連接MySQL會報錯的原因1、驅(qū)動程序缺失Kettle需要使用MySQL的JDBC驅(qū)動程序來連接MySQL數(shù)據(jù)庫。如果沒有正確配置或提供JDBC驅(qū)動程序,...詳情>>

2023-10-13 08:53:41
wait()、sleep()、join()和yield()區(qū)別是什么?

一、wait()wait()方法是Object類中的方法,主要用于線程間的同步和協(xié)作。當一個線程調(diào)用某個對象的wait()方法時,它會釋放該對象的鎖,并進入等...詳情>>

2023-10-13 08:45:29
主站蜘蛛池模板: 农夫山泉有点甜高清2在线观看| 欧美性生活视频免费| chinese乱子伦xxxx国语对白| 樱花草视频www| 亚洲视频手机在线| 男女做爽爽免费视频| 黄色大片播放| 国产私拍视频| 免费在线一区| 人人爽天天碰天天躁夜夜躁 | 特级毛片www| 免费人成在线观看网站| 国产在线视频一区二区三区| 亚洲另类春色校园小说| www..com色| 天堂在线影院| 国产国语一级毛片全部| 一本色道久久综合亚洲精品 | 美女被羞羞网站免费下载| 欧洲老妇性| 桃花影院www视频播放| 成人免费夜片在线观看| 中文字幕永久在线视频| 国产精品久久久久久影视| 女人是男人的女未来1分49分 | 日韩免费三级电影| 美国式禁忌免费看| 啊!摁摁~啊!用力~快点视频免费| 国内精品久久久久影院网站| a级成人毛片免费视频高清| 大胸小子bd在线观看| 国产日韩欧美亚洲| 国产日韩一区二区三区在线观看| 在线观看精品国产福利片87| 精品伊人久久| 欧美三级免费观看| 国产福利在线观看一区二区| 国产精品成人va在线观看| 欧美kkk4444在线观看| 欧美成人高清手机在线视频| 波多野结衣中文无毒不卡|