最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql中redo log和 binlog的區(qū)別

 更新時(shí)間:2022年01月29日 08:36:35   作者:初念初戀  
本文主要介紹了mysql中redo log和 binlog的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

想跟大家聊聊關(guān)于 mysql 中的兩個(gè)小的知識(shí)點(diǎn):redo log 和 binlog 。

redo log :InnoDB 存儲(chǔ)引擎層方面的日志,所以如果你使用的存儲(chǔ)引擎不是 InnoDB 的話,那就根本談不上 redo log。

binlog : MySQL Server 層記錄的日志,所以不管是用的什么存儲(chǔ)引擎,只要是 MySQL 都是會(huì)有 binlog 的存在,在做 MySQL 主從復(fù)制的時(shí)候,利用的就是 binlog。

接下來(lái),我們就詳細(xì)來(lái)看看它們都分別做了啥?

redo log

為什么要有這個(gè) redo log 日志文件呢?

這里,我們可以舉個(gè)例子,現(xiàn)在我們想對(duì)數(shù)據(jù)庫(kù)的數(shù)據(jù)進(jìn)行修改操作,現(xiàn)在一條 update 語(yǔ)句過(guò)來(lái),一般 update 操作都伴隨著查詢的操作,得先找到這條數(shù)據(jù),然后再進(jìn)行更新操作對(duì)吧。

如果數(shù)據(jù)量比較小還好,很快就能找到并且更新完畢,但是如果數(shù)據(jù)量比較大,里面有一億條數(shù)據(jù),怎么辦?而且更新操作肯定是要寫到磁盤上去的,那這中間的 IO 成本呢?

如果我有好幾十條 update 語(yǔ)句先后更新呢?這樣想的話,你就能想到,就這些操作,成本就高的不行,那能不能降低一下這些成本呢?

這時(shí)候,redo log 就起到作用了。 當(dāng)有一條記錄更新的時(shí)候, InnoDB 引擎就會(huì)先把記錄寫到 redo log 里面去,同時(shí)更新內(nèi)存,這樣就算是更新這條數(shù)據(jù)成功了。

但是此時(shí),它并沒(méi)有更新到磁盤上去對(duì)吧?別擔(dān)心, InnoDB 會(huì)在恰當(dāng)?shù)臅r(shí)候,把這條及記錄更新到磁盤上去。

這樣的思想或者技術(shù),有個(gè)專有名詞: WAL 技術(shù),也就是 WriteAheadLogging ,核心就是先寫日志,再寫磁盤。

redo log 不能一直寫吧?

redo log 的大小是固定的,前面的內(nèi)容會(huì)被覆蓋,一旦寫滿,就會(huì)觸發(fā) redo log 到磁盤的同步,以便騰出空間記錄后面的修改。

數(shù)據(jù)庫(kù)發(fā)生宕機(jī)或者重啟,數(shù)據(jù)也將不會(huì)丟失。

因?yàn)橛辛?redo log ,之前提交的記錄都還在,只需要根據(jù) redo log 里面的記錄進(jìn)行相應(yīng)恢復(fù)就可以了。

binlog

binlog 是 MySQL Server 層的記錄日志。

redo log 和 binlog 的區(qū)別:

  • redo log 是 InnoDB 引擎特有的; binlog 是 MySQL 的 Server 層實(shí)現(xiàn)的,所有的引擎都是可以的。

  • redo log 是物理日志,記錄的是”在 XXX 頁(yè)上做了 XXX 修改”;binlog 是邏輯日志,比如” 給 id = 2 這一行的 c 字段加 1”。

  • redo log 是有固定大小的,所以它的空間會(huì)用完,如果用完的話,一定要進(jìn)行一些寫入磁盤的操作才可以繼續(xù);binlog 是可以追加寫入的,也就是 binlog 沒(méi)有空間的概念,一直寫就行了。

binlog 以事件的形式記錄了所有的 DDL 和 DML 語(yǔ)句(因?yàn)樗涗浀氖遣僮鞫皇菙?shù)據(jù)值,屬于邏輯日志),可以用來(lái)做主從復(fù)制和數(shù)據(jù)恢復(fù)

在開啟了 binlog 功能的情況下,我們可以把 binlog 導(dǎo)出成 SQL 語(yǔ)句,把所有的操作重放一遍,來(lái)實(shí)現(xiàn)數(shù)據(jù)的恢復(fù)。

有了這兩個(gè)日志之后,我們來(lái)看一下一條更新語(yǔ)句是怎么執(zhí)行的(redo 不能一次寫入了):

例如一條語(yǔ)句:update user set name='小馬' where id=1;

  • 先查詢到這條數(shù)據(jù),如果有緩存,也會(huì)用到緩存。

  • 把 name 改成小馬,然后調(diào)用引擎的 API 接口,寫入這一行數(shù)據(jù)到內(nèi)存,同時(shí)記錄 redo log。這時(shí) redo log 進(jìn)入 prepare 狀態(tài),然后告訴執(zhí)行器,執(zhí)行完成了,可以隨時(shí)提交。

  • 執(zhí)行器收到通知后記錄 binlog,然后調(diào)用存儲(chǔ)引擎接口,設(shè)置 redo log為 commit 狀態(tài)。

  • 更新完成。

你能發(fā)現(xiàn) redo log 竟然是先 prepare 狀態(tài),等 binlog 寫完之后,才是 commit 狀態(tài),這種方式就叫”兩階段提交”。為什么會(huì)有這種方式呢?

redo log 和 binlog 都可以用于表示事務(wù)的提交狀態(tài),而兩階段提交就是讓這兩個(gè)狀態(tài)保持邏輯上的一致。

可以假設(shè)一下,如果不采用這種方式,而是就先寫 redo log ,再寫 binlog ,會(huì)怎樣? 如果在寫 binlog 時(shí),發(fā)生了異常,更新操作已經(jīng)到 redo log 中了,但是此時(shí) binlog 并沒(méi)有進(jìn)行更新,是不是出現(xiàn)了數(shù)據(jù)不一致?

先寫 binlog 再寫 redo log 也是一樣的道理。所以,在寫時(shí),先讓 redo log 處于 prepare 狀態(tài),等 binlog 寫完之后,再讓 redo log 處于 commit 狀態(tài),這樣就保持了邏輯上的一致。

小結(jié)

到此這篇關(guān)于mysql中redo log和 binlog的區(qū)別的文章就介紹到這了,更多相關(guān)mysql中redo log和binlog內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用MyDumper重建MySQL副本的實(shí)現(xiàn)

    使用MyDumper重建MySQL副本的實(shí)現(xiàn)

    本文主要介紹了MyDumper重建MySQL副本的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2026-03-03
  • Linux服務(wù)器中MySQL遠(yuǎn)程連接的開啟方法

    Linux服務(wù)器中MySQL遠(yuǎn)程連接的開啟方法

    今天在Linux服務(wù)器上安裝了msyql數(shù)據(jù)庫(kù),在本地訪問(wèn)的時(shí)候可以訪問(wèn),但是我想通過(guò)遠(yuǎn)程的方式訪問(wèn)的時(shí)候就不能訪問(wèn)了,查詢資料后發(fā)現(xiàn),Linux下MySQL默認(rèn)安裝完成后只有本地訪問(wèn)的權(quán)限,沒(méi)有遠(yuǎn)程訪問(wèn)的權(quán)限,需要你給指定用戶設(shè)置訪問(wèn)權(quán)限才能遠(yuǎn)程訪問(wèn)該數(shù)據(jù)庫(kù)
    2017-06-06
  • MySQL控制用戶輸錯(cuò)密碼嘗試次數(shù)

    MySQL控制用戶輸錯(cuò)密碼嘗試次數(shù)

    這篇文章主要介紹了MySQL如何控制用戶輸錯(cuò)密碼嘗試次數(shù),文中給大家提到了死鎖監(jiān)控方法及處理方案,需要的朋友可以參考下
    2019-11-11
  • MySQL回表的性能傷害程度有多大

    MySQL回表的性能傷害程度有多大

    這篇文章主要介紹了MySQL回表的性能傷害程度有多大?下面我們就帶著疑問(wèn)進(jìn)入下面文章了解詳細(xì)內(nèi)容,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-02-02
  • B-樹的插入過(guò)程介紹

    B-樹的插入過(guò)程介紹

    今天小編就為大家分享一篇關(guān)于B-樹的插入過(guò)程介紹,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-01-01
  • 確認(rèn)MySQL備份權(quán)限最小化的方法

    確認(rèn)MySQL備份權(quán)限最小化的方法

    備份權(quán)限最小化的核心是:僅授予備份操作必需的權(quán)限,移除所有無(wú)關(guān)權(quán)限,避免備份賬號(hào)權(quán)限過(guò)大導(dǎo)致數(shù)據(jù)泄露 / 篡改風(fēng)險(xiǎn),本文給大家介紹了如何確認(rèn) MySQL 備份權(quán)限的最小化,需要的朋友可以參考下
    2025-12-12
  • MySQL中對(duì)表連接查詢的簡(jiǎn)單優(yōu)化教程

    MySQL中對(duì)表連接查詢的簡(jiǎn)單優(yōu)化教程

    這篇文章主要介紹了MySQL中對(duì)表連接查詢的簡(jiǎn)單優(yōu)化教程,表連接查詢是MySQL最常用到的基本操作之一,因而其的優(yōu)化也非常值得注意,需要的朋友可以參考下
    2015-12-12
  • mysql的中文數(shù)據(jù)按拼音排序的2個(gè)方法

    mysql的中文數(shù)據(jù)按拼音排序的2個(gè)方法

    這篇文章主要介紹了mysql的中文數(shù)據(jù)按拼音排序的2個(gè)方法,用于一些特殊環(huán)境,需要的朋友可以參考下
    2014-06-06
  • MySQL Installer 8.0.21安裝教程圖文詳解

    MySQL Installer 8.0.21安裝教程圖文詳解

    這篇文章主要介紹了MySQL Installer 8.0.21安裝教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 教你使用idea連接服務(wù)器mysql的步驟

    教你使用idea連接服務(wù)器mysql的步驟

    這篇文章主要介紹了如何使用idea連接服務(wù)器上的mysql,具體步驟本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2024-02-02

最新評(píng)論

富阳市| 隆尧县| 南丰县| 佛教| 大田县| 旌德县| 荥阳市| 金川县| 广汉市| 曲松县| 仪征市| 阿克苏市| 平顺县| 太康县| 潜江市| 昌平区| 英山县| 苏尼特左旗| 侯马市| 嘉义市| 巫山县| 揭阳市| 麻阳| 绥滨县| 通许县| 烟台市| 固阳县| 密山市| 西昌市| 昌邑市| 黑山县| 云安县| 丰县| 临漳县| 宜州市| 石首市| 宁乡县| 阳东县| 宿松县| 阿拉尔市| 滦平县|