Mysql的redolog和binlog

記錄每一次錯誤發表於2022-08-12

1.redlog:

    1.1 什麼是redolog:

        redlog是重做日誌,是Innodb儲存引擎獨有的,他讓MySQL在崩潰的時候具有了恢復資料的能力,即在資料庫發生意外的時候,可以進行資料恢復;


        redlog日誌會備份的是事務執行過程中的修改資料,是事務過程中最新的資料位置。


     1.2  redolog日誌的工作原理

         redolog是儲存了資料被修改的值,當提交了一個事務的時候,InnoDB會先把要修復的資料寫入到日誌中,然後再去修改緩衝池裡面的真正資料頁。redolog本身也是由兩個部分組成,分別是在記憶體中的日誌快取(redolog buffer)和在磁碟中的重做日誌檔案(redologfile);前者是存在記憶體中的,容易丟失,後者是存在硬碟中的,丟失機率較低。


        對redolog的工作原理舉例理解就是:


        每次當我們上課在記筆記的時候,老師講的太快,內容又有很多,若果我們直接記在筆記本里面,就會變成這一塊跟不上,留出位置後在補上的話又發現留的位置是不夠的;又有的時候老師語速太快,跟的著急然後就字型寫飛了,後面看壓根不知道自己剛剛寫的是個啥,只能看出是個鬼畫符(誰不想記筆記的本子美美的),不僅浪費了時間,還不利於後續的檢視;相反,我們可以先將課上的筆記記錄在自己日常練習的小本本上,代有時間的時候,在一字一字的往筆記本上寫。這樣就可以保證筆記本的賞心悅目。如果說練習的小本本沒有了,那我們可以先將以前記錄的筆記先寫到筆記本上面,然後將以前寫過的筆記劃掉,重新在寫(雖然劃掉也沒地方寫了,但是意思是那麼個意思,理解就好~~~)。


        同樣將上述老師讓記得筆記當做儲存的日誌,練習的小本本當成記憶體中的日誌快取,筆記本相當於磁碟中的重做日誌。而這種先寫日誌,在寫磁碟的的過程叫做WAL技術。


        1.4 redolog的配置引數

             如何檢視redolog的引數:


show variables like '%innodb_log%';

檢視的結果是:


        


2.binlog:

       2.1什麼是binlog  

               binlog是一個二進位制格式的檔案,用於記錄使用者對資料庫更新的SQL語句資訊,預設情況下,binlog是二進位制格式的,不能使用文字工具的命令進行檢視,而是使用mysqlbinlog解析檢視。


        2.2binlog的功能

                當資料寫入到資料庫的時候,會同時把更新的SQL語句寫入到相應的binlog檔案裡面,同時在使用mysqldump進行備份的時候,只是對一段時間的資料進行了全域性備份,但是如果備份後發現資料庫伺服器產生故障,這個時候就要用到binlog日誌了。


3.binlog和redolog的區別:

        1).redo log是在InnoDB儲存引擎層產生,而binlog是mysql資料庫的上層產生,而且binlog是二進位制格式的日誌,不僅僅針對InnoDB儲存引擎。


        2).兩種日誌記錄的內容形式不同,MySQL的binlog是邏輯日誌,而InnoDB儲存引擎層面的重做日誌是物理日誌。


        3).兩種日誌與記錄寫入磁碟的時間點不同,二進位制日誌只在事物提交完成後進行一次寫入,而redo log的重做日誌在事物的進行過程中不斷地被寫入。


        4).binlog不是迴圈使用,在寫滿或者重啟之後,會生成新的binlog檔案,但是redo log是迴圈使用的。


4.   為什麼兩個日誌都要用,只用其中一個不可以嗎

         首先,MySQL在最開始用的不是InnoDB模型,而是使用的自帶的MySAM引擎,但是他沒有一個重新整理自身的功能,而是binlog的日誌只用于歸檔,所以只依靠binlog的話是沒有crash-safe的功能的,所以需要InnoDB的crash-safe來相輔相成吧。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31547066/viewspace-2910136/,如需轉載,請註明出處,否則將追究法律責任。

相關文章