redo log & undo log & bin log

Redo日誌

—innodb存儲引擎的日誌文件
▪ 當發生數據修改的時候,innodb引擎會先將記錄寫到redo log中, 並更新內存,此時更新就算是完成了,同時innodb引擎會在合適的時機將記錄操作到磁盤中
▪ Redolog是固定大小的,是循環寫的過程
▪ 有了redolog之後,innodb就可以保證即使數據庫發生異常重啓,
之前的記錄也不會丟失,叫做crash-safe

ib_logfile_0和ib_logfile_3都是可以寫的
write pos 是用來不斷的往後寫的
checkpoint是不斷的擦出已經寫過的數據
在這裏插入圖片描述
就相當於是一個buffer,如果每次修改都寫到磁盤當中,效率就會特別特別低,所以就把所有都修改先放到redo.log當中,然後隔一段時間就一次性把redo log的修改寫回到磁盤中去

在這裏插入圖片描述

Undo log

▪ 目的 : 是爲了實現事務的原子性
(比如一個事物五條指令,然後執行了三條發生了錯誤,我們就需要把數據恢復到三條指令錯誤之前,於是所以就需要記錄一下剛剛乾了什麼好恢復回去)
在mysql數據庫InnoDB存儲引擎中,還 用Undo Log來實現多版本併發控制(簡稱:MVCC)
▪ 在操作任何數據之前,首先將數據備份到一個地方(這個存儲數據備份的地方 稱爲Undo Log)。然後進行數據的修改。如果出現了錯誤或者用戶執行了 ROLLBACK語句,系統可以利用Undo Log中的備份將數據恢復到事務開始之 前的狀態
▪ 注意:undo log是邏輯日誌,可以理解爲:
– 當delete一條記錄時,undo log中會記錄一條對應的insert記錄
– 當insert一條記錄時,undo log中會記錄一條對應的delete記錄
– 當update一條記錄時,它記錄一條對應相反的update記錄

bin log

----服務端的日誌文件
前兩個都是歸屬於存儲引擎innodb的,這個歸屬於服務端
▪ binlog是server層的日誌,主要做mysql功能層面的事情
▪ 與redo日誌的區別:

redo binlog
物理日誌記錄的是在某個數據頁上做了什麼修改 邏輯日誌記錄的是這個語句的原始邏輯
循環寫的,空間會用完 可以追加寫的,不會覆蓋之前的日誌信息

ps. kafka:
直接往內存懟,並且效率比較高
1.順序讀寫
2.0拷貝

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