MySQL 日誌系統 redo log、binlog

邢闖洋發表於2021-05-24

redo log 是什麼

redeo log (重做日誌),有一個比喻可以用來描述,就是酒店掌櫃有一個粉板,用來記錄客人的賒賬記錄,如果賒賬的人不多,他可以記在粉板上,如果賒賬的人多了,他記不下了,就需要有一個記賬本。

這時,如果客人來賒賬或者還賬,掌櫃可以有兩種方式:
一是翻開記賬本找到這個客人的所屬賒賬記錄修改
二是直接寫在粉板上,等客人少的時候或者打樣了寫在本子上。

當客人很多的時候肯定是選擇後者效率最高

同樣的,MySQL 也是一樣,redo log 就是這個作用,當請求過來時每次都去修改硬碟中的資料對 IO 消耗很大,為了解決這個問題,MySQL 就用了同樣的設計思想來提升更新效率。

簡單說,就是 InnoDB 在更新記錄的時候會先把更新操作記錄在日誌中,在寫入到記憶體,整個更新就算完成了,然後在系統空閒的時候等其他方面因素在將 redo log 中的資料落入磁碟持久化。

如果今天賒賬的不多,掌櫃可以等打樣後將粉板上的核對後寫入記賬本,如果客人特別多的時候粉板寫滿了,這個時候只能將粉板的內容消除掉,在重新寫在粉板上。

同樣,redo log 也是有大小的,比如可以配置為 4 組檔案,每組檔案為 1 GB,那麼這塊粉板就可以記錄 4 GB的內容,當寫滿之後就開始消除前面的迴圈寫。

binlog

binlog 是 MySQL Server 端的日誌,他是追加寫的,他記錄了 MySQL 中所有操作的日誌。
它與 redo log 日誌的區別在於 redo log 是物理的,binlog 是邏輯的,由於 redo 是屬於 InnoDB 引擎,所以必須要有 binlog,因為你可以使用別的引擎。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章