MySQL重做日誌

2021-07-04 08:16:28 字數 1350 閱讀 9708

用來實現事物的永續性,即事務acid中的d。重做日誌有兩部分組成:

當事務commit時,必須將事務的全部日誌寫入重做日誌檔案進行持久化,待完成後事務commit的操作才算完成,即日誌前寫規則

為確保每次日誌都寫入到重做日誌檔案,在每次寫入後都進行一次fsync操作。因為重做日誌檔案沒有使用o_direct選項,所以重做日誌先寫入檔案系統快取,為確保寫入磁碟必須經行一次fsync操作。

重做日誌是物理邏輯日誌,二進位制日誌是邏輯日誌

物理日誌儲存乙個頁中發生變化的位元組。不會導致資料發生不一致的問題,但是日誌產生的量比較大。

邏輯日誌記錄的是對於表的操作,尺寸小但無法保證回滾一致性。

物理邏輯日誌結合了物理日誌和邏輯日誌的優點,在頁的內部是邏輯的。

重做日誌是在innodb引擎中才產生的;二進位制日誌是mysql上層生成的,對資料庫的更改都會記錄。

寫入磁碟的時間不同

重做日誌快取在記憶體中,易丟失,大小由innodb_log_buffer_size控制,預設大小為1mb。要及時寫入重做日誌檔案。

innodb中,重做日誌都以512位元組進行儲存。就是說重做日誌快取,檔案,歸檔檔案都是以塊的方式進行儲存的,稱之為重做日誌塊。

乙個重做日誌快由 塊頭(12位元組),塊尾(8位元組),和日誌本身組成。

塊頭中有塊的基本資訊。

當乙個塊的剩餘空間不夠存下下一條記錄的話,儲存在下乙個塊中,塊頭中儲存著快中第一條記錄的偏移量。

日誌檔案也是由塊組成,同樣512位元組,從buffer中寫入,寫入規則

引數innobd_log_group_home_dir控制檔案的所在路徑。innodb_log_file_size控制檔案大小,預設值為5mb,重做日誌檔案的總大小要小於4gb。

記錄以追加的方式寫在檔案的最後。當乙個檔案被寫滿時,會接著下乙個寫。每個日誌檔案的頭2kb位元組保留。

由重做日誌檔案組成,是乙個邏輯概念,並沒有實際的物理檔案,組中的檔案大小相同。引數innodb_log_files_in_group來設定檔案組中有多少個檔案。

映象功能

每個日誌組儲存的內容都是完全相同的,是映象的關係,目的是提高資料庫的可用性。映象功能由引數innodb_mirrored_log_groups控制,預設值為1,表示不啟用。

其實重做日誌檔案是迴圈反覆使用的(round robin)。假設有三個日誌檔案:log1,log2,log3。重做日誌快取先把快取寫入log1,寫滿之後依次寫入下乙個file,log3 寫滿時,則寫到log1中,覆蓋之前的內容。

為不讓資料丟失,在覆蓋之前要先將log1中的資料歸檔,在寫入過程中,重做檔案數量不變,檔名不變,而歸檔檔案在增加。

引數innodb_log_archive用來設定開啟歸檔功能。

mysql重做日誌

mysql預設情況下會有兩個檔案 ib logfile0和ib logfile1,這兩個檔案就是重做日誌檔案,或者事務日誌。重做日誌的目的 萬一例項或者介質失敗,重做日誌檔案就能派上用場。每個innodb儲存引擎至少有乙個重做日誌檔案組,每個檔案組下至少有2個重做日誌檔案,如預設的ib logfil...

MYSQL 重做日誌

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

mysql 日誌之redo log 重做日誌

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