MySQL redo log(重做日誌)和 binlog(歸檔日誌)

  • WAL的全稱是Write-Ahead Logging,它的關鍵點就是先寫日誌,再寫磁盤。
  • 具體來說,當有一條記錄需要更新的時候,InnoDB引擎就會先把記錄寫到redo log(粉板)裏面,並更新內存,這個時候更新就算完成了。同時,InnoDB引擎會在適當的時候,將這個操作記錄更新到磁盤裏面,而這個更新往往是在系統比較空閒的時候做,這就像打烊以後掌櫃做的事。
  • redo log是InnoDB引擎特有的日誌,而Server層也有自己的日誌,稱爲binlog(歸檔日誌)。
  • 我想你肯定會問,爲什麼會有兩份日誌呢?
    因爲最開始MySQL裏並沒有InnoDB引擎。MySQL自帶的引擎是MyISAM,但是MyISAM沒有crash-safe的能力,binlog日誌只能用於歸檔。而InnoDB是另一個公司以插件形式引入MySQL的,既然只依靠binlog是沒有crash-safe能力的,所以InnoDB使用另外一套日誌系統——也就是redo log來實現crash-safe能力。

這兩種日誌有以下三點不同。

  • redo log是InnoDB引擎特有的;binlog是MySQL的Server層實現的,所有引擎都可以使用。
  • redo log是物理日誌,記錄的是“在某個數據頁上做了什麼修改”;binlog是邏輯日誌,記錄的是這個語句的原始邏輯,比如“給ID=2這一行的c字段加1 ”。
  • redo log是循環寫的,空間固定會用完;binlog是可以追加寫入的。“追加寫”是指binlog文件寫到一定大小後會切換到下一個,並不會覆蓋以前的日誌。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章