在线观看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

    文章

    379

    瀏覽量

    25230
  • MySQL
    +關注

    關注

    1

    文章

    819

    瀏覽量

    26643
  • 日志
    +關注

    關注

    0

    文章

    138

    瀏覽量

    10659
  • binlog
    +關注

    關注

    0

    文章

    7

    瀏覽量

    1252

原文標題:還分不清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 ?5600次閱讀
    半導體<b class='flag-5'>三</b>極管的<b class='flag-5'>三種</b>基本放大電路的<b class='flag-5'>三種</b>連接法電路圖

    三種不同的“防 Ping”技巧

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

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

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

    jdbc注冊驅動的三種方式

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

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

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

    MySQL事務日志

    大家都清楚,日志MySQL 數據庫的重要組成部分,記錄著數據庫運行期間各種狀態信息。MySQL 日志主要包括「錯誤日志」、「查詢
    的頭像 發表于 11-14 09:58 ?1747次閱讀
    <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 ?1369次閱讀

    基于mysql自有方式采集獲取監控數據

    我們常聽 MySQL 中有二進制日志 binlog、中繼日志 relaylog、重做回滾日志 redolog、undolog 等。針對慢查詢,還有一
    發表于 12-30 10:56 ?425次閱讀

    如何優化MySQL中的join語句

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

    mysql主從復制三種模式

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

    systemd journal收集日志三種方式

    隨著 systemd 成了主流的 init 系統,systemd 的功能也在不斷的增加,比如對系統日志的管理。Systemd 設計的日志系統好處多多,這里筆者就不再贅述了,本文筆者主要介紹 systemd journal 收集日志
    的頭像 發表于 10-23 11:50 ?303次閱讀
    systemd journal收集<b class='flag-5'>日志</b>的<b class='flag-5'>三種</b>方式
    主站蜘蛛池模板: 速度与激情10| 在线看片成人免费视频| 国产精品第九页| 自偷自拍亚洲欧美清纯唯美| 插插天天| 日本xx69| 49vv婷婷网| 亚洲精品免费视频| 亚洲一区毛片| 天天看天天干天天操| 国模在线观看| 天天插天天透| 天堂中文在线网| 色多多黄色| 欧美精品一区在线看| 免费看你懂的| 久久婷婷激情综合色综合也去 | 三级黄色在线观看| 日本三级黄视频| 美国激情ap毛片| 国模最新私拍视频在线观看| 成人在线看片| 天天躁日日躁狠狠躁中文字幕老牛| 毛色毛片| 国产免费黄视频| 怡红院免费va男人的天堂| 天天干天天做| 国产99久9在线视频| 在线观看中文字幕一区| 操白虎美女| 四虎最新免费观看网址| 欧美亚洲综合一区| 国产成人综合久久| 床上激情四射| 色综合久久久高清综合久久久| 免费在线色视频| 夜夜骑夜夜操| 91成人免费福利网站在线| 操综合| 欧美性色xo影院69| 三级在线观看视频|