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可以作爲恢復數據使用,主從複製搭建。