国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

            手機(jī)站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

            千鋒教育

            掃一掃進(jìn)入千鋒手機(jī)站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

            當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > mysql group commit為什么要保證binlog和redo log提交的順序一致?

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

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

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

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

            – 自動(dòng)為每個(gè)事務(wù)分配一個(gè)少數(shù)的ID(XID)。

            – COMMIT會(huì)被自動(dòng)的分成Prepare和Commit兩個(gè)階段。

            – Binlog會(huì)被當(dāng)做事務(wù)協(xié)調(diào)者(Transaction Coordinator),Binlog Event會(huì)被當(dāng)做協(xié)調(diào)者日志。

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

            事務(wù)的提交主要分為兩個(gè)主要步驟:

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

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

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

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

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

            2.2 告訴引擎做commit。

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

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

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

            延伸閱讀:

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

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

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

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

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

            一、怎么理解Mongodb是介于關(guān)系型和非關(guān)系型的數(shù)據(jù)庫(kù)MongoDB被稱為介于關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)和非關(guān)系型數(shù)據(jù)庫(kù)(NoSQL)之間,這是因?yàn)樗谝韵?..詳情>>

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

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

            2023-10-13 09:05:04
            Kettle連接MySQL為什么會(huì)報(bào)錯(cuò)?

            一、Kettle連接MySQL會(huì)報(bào)錯(cuò)的原因1、驅(qū)動(dòng)程序缺失Kettle需要使用MySQL的JDBC驅(qū)動(dòng)程序來(lái)連接MySQL數(shù)據(jù)庫(kù)。如果沒(méi)有正確配置或提供JDBC驅(qū)動(dòng)程序,...詳情>>

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

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

            2023-10-13 08:45:29
            快速通道