今天給大家分享MySQL中的三種核心日誌——Redo Log、Undo Log和Binlog,涵蓋它們的介紹、作用、儲存位置、寫入機制、記錄格式、特點以及如何管理這些日誌。
1. Redo Log(重做日誌)
1.1 介紹與作用
Redo Log記錄了對InnoDB儲存引擎中數據頁修改的物理操作。它的主要目的是確保事務的永續性,即使在系統崩潰時也能保證數據不遺失。當事務送出時,其相關更改首先被記錄到Redo Log中,隨後才會標記事務狀態為已送出。
1.2 預設儲存位置
Redo Log儲存在MySQL的數據目錄下的`ib_logfile*`檔中,如`/var/lib/mysql/ib_logfile0`和`ib_logfile1`。
1.3 寫入機制
Redo Log采用迴圈寫的方式,當一個日誌檔寫滿後會切換到下一個日誌檔繼續寫入。事務送出時,相關日誌會立即寫入磁盤(即使事務尚未完成),這稱為「預寫式日誌」(Write-Ahead Logging, WAL)策略。
1.4 記錄格式
Redo Log記錄的是物理日誌,即實際對數據頁做的修改操作。
1.5 特點
● 確保事務的永續性。
● 支持崩潰恢復,透過重做已記錄的操作來恢復數據。
1.6 如何刪除
Redo Log是迴圈使用的,不需要手動刪除。MySQL會自動管理這些日誌檔,舊的日誌在新的日誌被寫滿並確認不再需要時會被覆蓋。
2. Undo Log(回滾日誌)
2.1 介紹與作用
Undo Log主要用於事務的回滾操作,記錄了如何撤銷對資料庫的修改,以實作事務的原子性。當事務需要回滾時,Undo Log能幫助恢復到事務開始前的狀態。
2.2 儲存位置
Undo Log儲存於InnoDB表空間內,具體位置依賴於表空間配置,一般位於ibdata檔或自訂的表空間檔中。
2.3 寫入機制
Undo Log同樣采用預寫日誌方式,事務開始時寫入Undo Log,事務送出或回滾後可能會被清理。
2.4 記錄格式
Undo Log記錄的是邏輯日誌,描述了如何反向操作以撤銷更改。
2.5 特點
● 支持事務的原子性,允許回滾操作。
● 在MVCC(多版本並行控制)中,用於提供歷史版本數據。
2.6如何刪除
Undo Log在事務送出且不再需要時會被自動清理,或者在表空間不足時按照一定的策略進行回收。
3. Binlog(二進制日誌)
3.1 介紹與作用
Binlog記錄了MySQL伺服器上執行的所有更改數據的SQL語句(除了數據查詢語句)。它主要用於數據恢復、主從復制以及數據審計。
3.2 儲存位置
Binlog檔預設儲存在MySQL的數據目錄下(/var/lib/mysql),檔名格式為`mysql-bin.*`。
3.3 寫入機制
Binlog采用追加寫的方式,新事件不斷被添加到日誌檔末尾。MySQL支持多種寫入模式,包括ROW(記錄每一行的變化)、STATEMENT(記錄執行的SQL語句)和MIXED(根據情況自動選擇ROW或STATEMENT)。
說明:需要開啟Binlog日誌,才會寫入 ,開啟方法一般修改mysql.ini(Windows)和my.cnf配置檔。
3.4 記錄格式
Binlog記錄的是邏輯日誌,根據設定的不同,可以是SQL語句的文本或是行級別的變化。
日誌格式 | 記錄內容 |
Statement | 記錄進行數據修改 SQL 語句。 |
Row | 記錄每一行的數據變更,占用較多空間。(預設) |
Mixed | 前兩者混合,判斷是否可能引起數據不一致:可能則用 Row 否則用 Statement |
3.5 特點
● 支持數據恢復和復制。
● 對於主從復制,是同步數據的關鍵。
● 可用於審計和數據變更跟蹤。
3.6 如何刪除
可以透過`PURGE BINARY LOGS`命令手動刪除指定的或過期的Binlog檔,或者使用reset 刪除全部日誌( 慎用 )
指令 | 含義 |
reset master | 刪除全部日誌 |
purge master logs to 'binlog.xxx' | 刪除xxx編號之前的日誌 |
purge master logs before 'yyyy-mm-dd hh:mm:ss' | 刪除引號時間之前產生的日誌 |
show variables like '%binlog_expire_logs_seconds%'; | 配置日誌過期時間,到期自動刪除 |
綜上所述,Redo Log、Undo Log和Binlog各自承擔著不同的職責,共同維護著MySQL資料庫的穩定執行和數據一致性。理解這些日誌的工作原理對於資料庫管理和最佳化至關重要。
小明工作助手新增pdf轉word、pdf轉圖片功能,歡迎免費體驗
歷史相關
優秀幹貨作者推薦
小編十多年工作經驗積累的電腦軟體分享給大家
CSDN:https://blog.csdn.net/xishining
個人部落格網站:https://programmerblog.xyz
往期推薦
!