mysql重做日誌

2021-07-05 02:55:33 字數 1074 閱讀 9950

**

mysql預設情況下會有兩個檔案:ib_logfile0ib_logfile1,這兩個檔案就是重做日誌檔案,或者事務日誌。

重做日誌的目的:萬一例項或者介質失敗,重做日誌檔案就能派上用場。

每個innodb儲存引擎至少有乙個重做日誌檔案組,每個檔案組下至少有2個重做日誌檔案,如預設的ib_logfile0、ib_logfile1。innodb儲存引擎先寫重做日誌檔案1,當達到檔案的最後時,會切換至重做日誌檔案2,當重做日誌檔案2也被寫滿時,會再被切換到重做日誌檔案1中。

影響重做日誌的引數:

innodb_log_file_size、innodb_log_files_in_group、innodb_log_group_home_dir影響著重做日誌檔案的屬性。

重做日誌與二進位制日誌的區別:

1)二進位制日誌會記錄所有與mysql有關的日誌記錄,包括innodb等其他儲存引擎的日誌,而innodb儲存引擎的重做日誌只記錄有關其本身的事務日誌,

2)記錄的內容不同,不管你將二進位制日誌檔案記錄的格式設為哪一種,其記錄的都是關於乙個事務的具體操作內容,而innodb儲存引擎的重做日誌檔案記錄的關於每個頁的更改的物理情況;

3)寫入的時間也不同,二進位制日誌檔案是在事務提交前進行記錄的,而在事務進行的過程中,不斷有重做日誌條目被寫入重做日誌檔案中。

從日誌緩衝寫入磁碟上的重做日誌檔案的條件:

在主線程中每秒會將重做日誌緩衝寫入磁碟的重做日誌檔案中,不論事務是否提交。另乙個觸發這個過程是由引數innodb_flush_log_at_trx_commit控制,表示在提交時,處理重做日誌的方式。

引數innodb_flush_log_at_trx_commit可設的值有0、1、2,0代表當提交事務時,並不將事務的重做日誌寫入磁碟上的日誌檔案,而是等待主線程每秒的重新整理,而1和2不同的地方在於:1是在commit時將重做日誌緩衝同步寫到磁碟;2是重做日誌非同步寫到磁碟,即不能完全保證commit時肯定會寫入重做日誌檔案,只是有這個動作。

值得注意的一點:因為重做日誌有個capacity變數,該值代表了最後的檢查點不能超過這個閥值。

MySQL重做日誌

用來實現事物的永續性,即事務acid中的d。重做日誌有兩部分組成 當事務commit時,必須將事務的全部日誌寫入重做日誌檔案進行持久化,待完成後事務commit的操作才算完成,即日誌前寫規則。為確保每次日誌都寫入到重做日誌檔案,在每次寫入後都進行一次fsync操作。因為重做日誌檔案沒有使用o dir...

MYSQL 重做日誌

主要作用 1.當資料庫例項或網路介質出問題,重做日誌能夠進行恢復,保證innodb引擎資料的完整性 內部構成 1.每個innodb儲存引擎至少有乙個重做日誌檔案組 group 2.每個日誌檔案組下至少有兩個重做日誌檔案,預設為ib logfile0 ib logfile1 3.可以設定多個映象日誌檔...

mysql 日誌之redo log 重做日誌

redo log 具體來說,當有一條記錄需要更新的時候,innodb 引擎就會先把記錄寫到 redo log 檔案 裡面,並更新記憶體,這個時候更新就算完成了。同時,innodb 引擎會在適當的時候,將這個操作記錄更新到磁碟裡面,而這個更新往往是在系統比較空閒的時候做。mysql 裡經常說到的 wa...