chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

MySQL三種日志講解

馬哥Linux運(yùn)維 ? 來(lái)源:馬哥Linux運(yùn)維 ? 2023-07-25 11:15 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

MySQL 日志包含了錯(cuò)誤日志、查詢?nèi)罩尽⒙樵內(nèi)罩?、事?wù)日志、二進(jìn)制日志等,如果存儲(chǔ)引擎使用的是 InnoDB ,二進(jìn)制日志(binlog)和事務(wù)日志(包括redo log和undo log) 是肯定繞不過(guò)去的,本篇接下來(lái)詳細(xì)為大家介紹這三種日志。

redo log

為什么要有 redo log ?

我們都清楚,事務(wù)的四大特性其中有一個(gè)是持久性,簡(jiǎn)單的說(shuō)就是只要事務(wù)提交成功,對(duì)數(shù)據(jù)庫(kù)做的修改就會(huì)被永久保存下來(lái),不會(huì)因?yàn)槿魏卧蛟倩氐皆瓉?lái)的狀態(tài)。

MySQL 是怎么樣保證持久性的呢?最簡(jiǎn)單的做法是在每次事務(wù)提交的時(shí)候,將該事務(wù)涉及修改的數(shù)據(jù)頁(yè)全部刷新回磁盤中,可是這么做存在嚴(yán)重的性能問(wèn)題:

單個(gè)事務(wù)可能涉及修改多個(gè)數(shù)據(jù)頁(yè),并且數(shù)據(jù)頁(yè)在物理上并不連續(xù),使用隨機(jī)IO寫入性能太差。

Innodb是以頁(yè)為單位進(jìn)行磁盤交互的,一個(gè)事務(wù)有可能只會(huì)修改一個(gè)數(shù)據(jù)頁(yè)中的幾個(gè)字節(jié),如果這時(shí)候?qū)⑼暾臄?shù)據(jù)頁(yè)刷回磁盤的話,很浪費(fèi)資源。

因此 MySQL 設(shè)計(jì)出了redo log,當(dāng)一條記錄更新的時(shí)候, InnoDB 引擎會(huì)先把記錄寫到 redo log 里面去,同時(shí)更新內(nèi)存,這樣就算這條數(shù)據(jù)更新成功了,完美地解決了性能問(wèn)題(文件更小并且是順序IO)。

注意此時(shí)數(shù)據(jù)并沒(méi)有更新到磁盤上,InnoDB 會(huì)在恰當(dāng)?shù)臅r(shí)候把這條記錄更新到磁盤上去。這種先寫日志然后再將數(shù)據(jù)刷盤的機(jī)制,有個(gè)專有名詞——WAL(Write-ahead logging)。

redo log 如何刷到磁盤的呢?

redo log包含兩部分:

內(nèi)存中的日志緩沖(redo log buffer)

磁盤上的日志文件(redo log file)

每執(zhí)行一條DML語(yǔ)句,數(shù)據(jù)庫(kù)先將記錄寫入redo log buffer,然后后續(xù)某個(gè)時(shí)間點(diǎn)再一次性將多個(gè)操作記錄寫到redo log file。MySQL 一共支持三種寫入redo log file的時(shí)機(jī),通過(guò)參數(shù)innodb_flush_log_at_trx_commit進(jìn)行配置,如下圖所示:

11a928f4-29ff-11ee-a368-dac502259ad0.png

bin log

bin log 是 MySQL 的邏輯日志,由Server層進(jìn)行記錄,用于記錄數(shù)據(jù)庫(kù)執(zhí)行的寫入性操作(不包括查詢)信息,以二進(jìn)制的形式保存在磁盤中。無(wú)論你使用的是任何的存儲(chǔ)引擎,mysql數(shù)據(jù)庫(kù)都會(huì)記錄binlog日志。

與redo log日志一樣,binlog也有自己的刷盤策略,通過(guò)sync_binlog參數(shù)控制:

0 :每次提交事務(wù)前將binlog寫入os cache,由操作系統(tǒng)控制什么時(shí)候刷到磁盤

1 :采用同步寫磁盤的方式來(lái)寫binlog,不使用os cache來(lái)寫binlog

N :當(dāng)每進(jìn)行n次事務(wù)提交之后,調(diào)用一次fsync() os cache中的binlog強(qiáng)制刷到磁盤

bin log 和 redo log 都用于記錄的修改之后的值,那么它們之間究竟有什么區(qū)別呢?

redo log 和 binlog 的區(qū)別

主要有以下三方面:

binlog 是 MySQL 的 Server 層實(shí)現(xiàn)的,所有的引擎都是可以的。redo log是InnoDB的日志。如果不使用InnoDB引擎,是沒(méi)有redo log的。

binlog是邏輯日志,記錄的是對(duì)哪一個(gè)表的哪一行做了什么修改;redo log是物理日志,記錄的是對(duì)哪個(gè)數(shù)據(jù)頁(yè)中的哪個(gè)記錄做了什么修改,可以理解為對(duì)磁盤上的哪個(gè)數(shù)據(jù)做了修改。

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

undo log

數(shù)據(jù)庫(kù)事務(wù)四大特性中有一個(gè)是原子性,原子性指對(duì)數(shù)據(jù)庫(kù)的一系列操作,要么全部成功,要么全部失敗,不可能出現(xiàn)部分成功的情況。實(shí)際上,原子性底層就是通過(guò)undo log實(shí)現(xiàn)的。

undo log主要記錄了數(shù)據(jù)的邏輯變化,比如一條UPDATE語(yǔ)句,對(duì)應(yīng)一條相反UPDATE的undo log,一條INSERT語(yǔ)句,對(duì)應(yīng)一條DELETE的undo log,這樣在發(fā)生錯(cuò)誤時(shí),就能回滾到事務(wù)之前的數(shù)據(jù)狀態(tài)。

undo log 同時(shí)也是MVCC(多版本并發(fā)控制)實(shí)現(xiàn)的關(guān)鍵。

總結(jié)

redo log是InnoDB存儲(chǔ)引擎的一種日志,主要作用是崩潰恢復(fù),刷盤策略參數(shù) innodb_flush_log_at_trx_commit 推薦設(shè)置成2。

binlog是MySQL Server層的一種日志,主要作用是歸檔。

undo log是InnoDB存儲(chǔ)引擎的一種日志,主要作用是回滾。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 磁盤
    +關(guān)注

    關(guān)注

    1

    文章

    394

    瀏覽量

    26169
  • MySQL
    +關(guān)注

    關(guān)注

    1

    文章

    889

    瀏覽量

    28856
  • 日志
    +關(guān)注

    關(guān)注

    0

    文章

    145

    瀏覽量

    10995
  • binlog
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    1367

原文標(biāo)題:還分不清bin log 、redo log 跟 undo log?

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    三種電源轉(zhuǎn)換器電路設(shè)計(jì)講解

      本文主要介紹了3.3V→5V電平轉(zhuǎn)換器、模擬增益電路和模擬補(bǔ)償電路三種電源轉(zhuǎn)換器的設(shè)計(jì)原理圖,對(duì)電路圖進(jìn)行簡(jiǎn)單的講解?! ?.3V→5V電平轉(zhuǎn)換器可以直接構(gòu)成電平轉(zhuǎn)換,往往是采用集成方案。有
    發(fā)表于 09-30 16:26

    MySQL的六個(gè)日志類型

    MySQL日志管理
    發(fā)表于 04-24 16:57

    STM32的三種boot模式介紹

    淺識(shí)STM32的三種boot模式文章目錄淺識(shí)STM32的三種boot模式任務(wù)摘要一、認(rèn)識(shí)boot1.三種BOOT模式介紹2.開發(fā)BOOT模式選擇3.STM32三種啟動(dòng)模式4.
    發(fā)表于 12-10 07:46

    半導(dǎo)體極管的三種基本放大電路的三種連接法電路圖

    半導(dǎo)體極管的三種基本放大電路的三種連接法電路圖
    發(fā)表于 05-06 14:55 ?5851次閱讀
    半導(dǎo)體<b class='flag-5'>三</b>極管的<b class='flag-5'>三種</b>基本放大電路的<b class='flag-5'>三種</b>連接法電路圖

    三種不同的“防 Ping”技巧

    三種不同的“防 Ping”技巧 淺析三種不同的“防 Ping”方法   眾所周知,Ping命令是一個(gè)非常有用的網(wǎng)絡(luò)命令,大家常用它
    發(fā)表于 04-14 13:53 ?1263次閱讀

    晶體管放大電路的三種方法

    模擬電子技術(shù)中晶體管放大電路的方法有三種,PPT簡(jiǎn)單講解。
    發(fā)表于 03-24 14:34 ?0次下載

    jdbc注冊(cè)驅(qū)動(dòng)的三種方式

    本文主要介紹了關(guān)于jdbc注冊(cè)驅(qū)動(dòng)的三種方式。jdbc中注冊(cè)驅(qū)動(dòng),首先導(dǎo)入對(duì)應(yīng)的包,例如mysql-connector-java-5.0.8-bin.jar。驅(qū)動(dòng)包是java和具體數(shù)據(jù)庫(kù)之間的連接
    的頭像 發(fā)表于 02-06 11:04 ?6322次閱讀
    jdbc注冊(cè)驅(qū)動(dòng)的<b class='flag-5'>三種</b>方式

    詳談MySQL數(shù)據(jù)庫(kù)的不同日志和源碼

    任何一數(shù)據(jù)庫(kù),都會(huì)擁有各種各樣的日志,mysql也不例外。
    的頭像 發(fā)表于 07-02 16:52 ?2889次閱讀

    MySQL事務(wù)日志

    大家都清楚,日志MySQL 數(shù)據(jù)庫(kù)的重要組成部分,記錄著數(shù)據(jù)庫(kù)運(yùn)行期間各種狀態(tài)信息。MySQL 日志主要包括「錯(cuò)誤日志」、「查詢
    的頭像 發(fā)表于 11-14 09:58 ?2093次閱讀
    <b class='flag-5'>MySQL</b>事務(wù)<b class='flag-5'>日志</b>

    80C51的三種復(fù)位技術(shù)講解資料下載

    電子發(fā)燒友網(wǎng)為你提供80C51的三種復(fù)位技術(shù)講解資料下載的電子資料下載,更有其他相關(guān)的電路圖、源代碼、課件教程、中文資料、英文資料、參考設(shè)計(jì)、用戶指南、解決方案等資料,希望可以幫助到廣大的電子工程師們。
    發(fā)表于 04-08 08:46 ?9次下載
    80C51的<b class='flag-5'>三種</b>復(fù)位技術(shù)<b class='flag-5'>講解</b>資料下載

    詳解MySQL日志的作用

    MySQL日志 主要包括錯(cuò)誤日志、查詢日志、慢查詢日志、事務(wù)日志、二進(jìn)制
    的頭像 發(fā)表于 07-22 14:44 ?1783次閱讀

    如何優(yōu)化MySQL中的join語(yǔ)句

    mysql中,join 主要有Nested Loop、Hash Join、Merge Join 這三種方式,我們今天來(lái)看一下最普遍 Nested Loop 循環(huán)連接方式,主要包括三種
    的頭像 發(fā)表于 04-24 17:03 ?1176次閱讀
    如何優(yōu)化<b class='flag-5'>MySQL</b>中的join語(yǔ)句

    mysql主從復(fù)制三種模式

    MySQL主從復(fù)制是一常見的數(shù)據(jù)同步方式,它可以實(shí)現(xiàn)將一個(gè)數(shù)據(jù)庫(kù)的更改同步到其他多個(gè)數(shù)據(jù)庫(kù)的功能。主從復(fù)制可以提高數(shù)據(jù)庫(kù)的可用性和性能,以及提供故障恢復(fù)和數(shù)據(jù)備份的支持。在MySQL中,有
    的頭像 發(fā)表于 11-16 14:04 ?2148次閱讀

    systemd journal收集日志三種方式

    隨著 systemd 成了主流的 init 系統(tǒng),systemd 的功能也在不斷的增加,比如對(duì)系統(tǒng)日志的管理。Systemd 設(shè)計(jì)的日志系統(tǒng)好處多多,這里筆者就不再贅述了,本文筆者主要介紹 systemd journal 收集日志
    的頭像 發(fā)表于 10-23 11:50 ?1161次閱讀
    systemd journal收集<b class='flag-5'>日志</b>的<b class='flag-5'>三種</b>方式

    介紹三種常見的MySQL高可用方案

    在生產(chǎn)環(huán)境中,為了確保數(shù)據(jù)庫(kù)系統(tǒng)的連續(xù)可用性、降低故障恢復(fù)時(shí)間以及實(shí)現(xiàn)業(yè)務(wù)的無(wú)縫切換,高可用(High Availability, HA)方案至關(guān)重要。本文將詳細(xì)介紹三種常見的 MySQL 高可用
    的頭像 發(fā)表于 05-28 17:16 ?808次閱讀