在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

MySQL三種日志講解

馬哥Linux運維 ? 來源:馬哥Linux運維 ? 2023-07-25 11:15 ? 次閱讀

前言

MySQL 日志包含了錯誤日志、查詢日志、慢查詢日志、事務日志、二進制日志等,如果存儲引擎使用的是 InnoDB ,二進制日志(binlog)和事務日志(包括redo log和undo log) 是肯定繞不過去的,本篇接下來詳細為大家介紹這三種日志。

redo log

為什么要有 redo log ?

我們都清楚,事務的四大特性其中有一個是持久性,簡單的說就是只要事務提交成功,對數據庫做的修改就會被永久保存下來,不會因為任何原因再回到原來的狀態。

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

單個事務可能涉及修改多個數據頁,并且數據頁在物理上并不連續,使用隨機IO寫入性能太差。

Innodb是以頁為單位進行磁盤交互的,一個事務有可能只會修改一個數據頁中的幾個字節,如果這時候將完整的數據頁刷回磁盤的話,很浪費資源。

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

注意此時數據并沒有更新到磁盤上,InnoDB 會在恰當的時候把這條記錄更新到磁盤上去。這種先寫日志然后再將數據刷盤的機制,有個專有名詞——WAL(Write-ahead logging)。

redo log 如何刷到磁盤的呢?

redo log包含兩部分:

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

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

每執行一條DML語句,數據庫先將記錄寫入redo log buffer,然后后續某個時間點再一次性將多個操作記錄寫到redo log file。MySQL 一共支持三種寫入redo log file的時機,通過參數innodb_flush_log_at_trx_commit進行配置,如下圖所示:

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

bin log

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

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

0 :每次提交事務前將binlog寫入os cache,由操作系統控制什么時候刷到磁盤

1 :采用同步寫磁盤的方式來寫binlog,不使用os cache來寫binlog

N :當每進行n次事務提交之后,調用一次fsync() os cache中的binlog強制刷到磁盤

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

redo log 和 binlog 的區別

主要有以下三方面:

binlog 是 MySQL 的 Server 層實現的,所有的引擎都是可以的。redo log是InnoDB的日志。如果不使用InnoDB引擎,是沒有redo log的。

binlog是邏輯日志,記錄的是對哪一個表的哪一行做了什么修改;redo log是物理日志,記錄的是對哪個數據頁中的哪個記錄做了什么修改,可以理解為對磁盤上的哪個數據做了修改。

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

undo log

數據庫事務四大特性中有一個是原子性,原子性指對數據庫的一系列操作,要么全部成功,要么全部失敗,不可能出現部分成功的情況。實際上,原子性底層就是通過undo log實現的。

undo log主要記錄了數據的邏輯變化,比如一條UPDATE語句,對應一條相反UPDATE的undo log,一條INSERT語句,對應一條DELETE的undo log,這樣在發生錯誤時,就能回滾到事務之前的數據狀態。

undo log 同時也是MVCC(多版本并發控制)實現的關鍵。

總結

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

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

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

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 磁盤
    +關注

    關注

    1

    文章

    388

    瀏覽量

    25655
  • MySQL
    +關注

    關注

    1

    文章

    849

    瀏覽量

    27525
  • 日志
    +關注

    關注

    0

    文章

    142

    瀏覽量

    10820
  • binlog
    +關注

    關注

    0

    文章

    7

    瀏覽量

    1304

原文標題:還分不清bin log 、redo log 跟 undo log?

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    三種電源轉換器電路設計講解

      本文主要介紹了3.3V→5V電平轉換器、模擬增益電路和模擬補償電路三種電源轉換器的設計原理圖,對電路圖進行簡單的講解。  3.3V→5V電平轉換器可以直接構成電平轉換,往往是采用集成方案。有
    發表于 09-30 16:26

    MySQL的六個日志類型

    MySQL日志管理
    發表于 04-24 16:57

    STM32的三種boot模式介紹

    淺識STM32的三種boot模式文章目錄淺識STM32的三種boot模式任務摘要一、認識boot1.三種BOOT模式介紹2.開發BOOT模式選擇3.STM32三種啟動模式4.
    發表于 12-10 07:46

    半導體極管的三種基本放大電路的三種連接法電路圖

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

    三種不同的“防 Ping”技巧

    三種不同的“防 Ping”技巧 淺析三種不同的“防 Ping”方法   眾所周知,Ping命令是一個非常有用的網絡命令,大家常用它
    發表于 04-14 13:53 ?1194次閱讀

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

    模擬電子技術中晶體管放大電路的方法有三種,PPT簡單講解
    發表于 03-24 14:34 ?0次下載

    jdbc注冊驅動的三種方式

    本文主要介紹了關于jdbc注冊驅動的三種方式。jdbc中注冊驅動,首先導入對應的包,例如mysql-connector-java-5.0.8-bin.jar。驅動包是java和具體數據庫之間的連接
    的頭像 發表于 02-06 11:04 ?6141次閱讀
    jdbc注冊驅動的<b class='flag-5'>三種</b>方式

    詳談MySQL數據庫的不同日志和源碼

    任何一數據庫,都會擁有各種各樣的日志mysql也不例外。
    的頭像 發表于 07-02 16:52 ?2737次閱讀

    MySQL事務日志

    大家都清楚,日志MySQL 數據庫的重要組成部分,記錄著數據庫運行期間各種狀態信息。MySQL 日志主要包括「錯誤日志」、「查詢
    的頭像 發表于 11-14 09:58 ?1902次閱讀
    <b class='flag-5'>MySQL</b>事務<b class='flag-5'>日志</b>

    80C51的三種復位技術講解資料下載

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

    詳解MySQL日志的作用

    MySQL日志 主要包括錯誤日志、查詢日志、慢查詢日志、事務日志、二進制
    的頭像 發表于 07-22 14:44 ?1544次閱讀

    如何優化MySQL中的join語句

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

    mysql主從復制三種模式

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

    systemd journal收集日志三種方式

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

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

    在生產環境中,為了確保數據庫系統的連續可用性、降低故障恢復時間以及實現業務的無縫切換,高可用(High Availability, HA)方案至關重要。本文將詳細介紹三種常見的 MySQL 高可用
    的頭像 發表于 05-28 17:16 ?156次閱讀
    主站蜘蛛池模板: 高清视频 一区二区三区四区 | 午夜久久久久久 | 久久久久无码国产精品一区 | 日本免费一区二区三区视频 | 我要看黄色一级毛片 | 日本午夜三级 | 69日本xxxxxxxxx96| 日韩免费高清一级毛片 | 一级大片免费看 | 成人在线免费 | 日本在线不卡一区 | 狠狠干激情 | 91久操 | 五月天婷婷激情 | 1024视频在线观看国产成人 | 成色网| 亚洲福利秒拍一区二区 | 天天爱天天做天天爽 | 网全大全黄 | 中文字幕在线不卡 | 免费看你懂的 | 天堂资源在线8 | 韩国朴银狐诱感在线观看 | 丁香六月婷婷在线 | 全免费一级午夜毛片 | 日韩一级片在线免费观看 | 日本老师69xxxxxxxxx | 久久久久女人精品毛片九一 | 蜜月mv国产精品 | 正在播放亚洲一区 | 免费福利片2022潦草影视午夜 | 在线你懂的视频 | 国产农村一级特黄α真人毛片 | 日本黄色免费一级片 | ak福利午夜在线观看 | 夜夜夜爽| 韩国理伦片在线观看2828 | 欧洲性freefree大白屁股 | 日韩黄色成人 | 拍拍拍无档又黄又爽视频 | 中文字字幕码一二区 |