【知識積累】關於Mysql的redo log、undo log、binlog的學習

1、MySQL中有七種日誌文件

  • 重做日誌(redo log)
  • 回滾日誌(undo log)
  • 二進制日誌(binlog)
  • 錯誤日誌(errorlog)
  • 慢查詢日誌(slow query log)
  • 一般查詢日誌(general log)
  • 中繼日誌(relay log)

2、redolog:重做日誌

redo log是InnoDB存儲引擎層的日誌,又稱重做日誌文件,用於記錄事務操作的變化,記錄的是數據修改之後的值,不管事務是否提交都會記錄下來。在實例和介質失敗(media failure)時,redo log文件就能派上用場,如數據庫掉電,InnoDB存儲引擎會使用redo log恢復到掉電前的時刻,以此來保證數據的完整性。
在一條更新語句進行執行的時候,InnoDB引擎會把更新記錄寫到redo log日誌中,然後更新內存,此時算是語句執行完了,然後在空閒的時候或者是按照設定的更新策略將redo log中的內容更新到磁盤中,這裏涉及到WAL即Write Ahead logging技術,他的關鍵點是先寫日誌,再寫磁盤。
有了redo log日誌,那麼在數據庫進行異常重啓的時候,可以根據redo log日誌進行恢復,也就達到了crash-safe。

  • 確保事務的持久性。
  • 防止在發生故障的時間點,尚有髒頁未寫入磁盤,在重啓mysql服務的時候,根據redo log進行重做,從而達到事務的持久性這一特性。

3、binlog:二進制日誌

  • 用於複製,在主從複製中,從庫利用主庫上的binlog進行重播,實現主從同步。
  • 用於數據庫的基於時間點的還原。

4、undolog:回滾日誌

保存了事務發生之前的數據的一個版本,可以用於回滾,同時可以提供多版本併發控制下的讀(MVCC),也即非鎖定讀

5、redo log和binlog區別

  • redo log是屬於innoDB層面,binlog屬於MySQL Server層面的,這樣在數據庫用別的存儲引擎時可以達到一致性的要求。
  • redo log是物理日誌,記錄該數據頁更新的內容;binlog是邏輯日誌,記錄的是這個更新語句的原始邏輯
  • redo log是循環寫,日誌空間大小固定;binlog是追加寫,是指一份寫到一定大小的時候會更換下一個文件,不會覆蓋。
  • redo log作爲異常宕機或者介質故障後的數據恢復使用;binlog可以作爲恢復數據使用,主從複製搭建。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章