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拷貝