Mysql 重做日志


Mysql默認情況下會有兩個文件:ib_logfile0ib_logfile1,這兩個文件就是重做日志文件,或者事務日志。

重做日志的目的:萬一實例或者介質失敗,重做日志文件就能派上用場。

每個InnoDB存儲引擎至少有一個重做日志文件組,每個文件組下至少有2個重做日志文件,如默認的ib_logfile0ib_logfile1InnoDB存儲引擎先寫重做日志文件1,當達到文件的最后時,會切換至重做日志文件2,當重做日志文件2也被寫滿時,會再被切換到重做日志文件1中。

影響重做日志的參數:

Innodb_log_file_sizeinnodb_log_files_in_groupinnodb_log_group_home_dir影響着重做日志文件的屬性。

 

重做日志與二進制日志的區別:

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

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

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

從日志緩沖寫入磁盤上的重做日志文件的條件:

在主線程中每秒會將重做日志緩沖寫入磁盤的重做日志文件中,不論事務是否提交。另一個觸發這個過程是由參數innodb_flush_log_at_trx_commit控制,表示在提交時,處理重做日志的方式。

參數innodb_flush_log_at_trx_commit可設的值有012,0代表當提交事務時,並不將事務的重做日志寫入磁盤上的日志文件,而是等待主線程每秒的刷新,而12不同的地方在於:1是在commit時將重做日志緩沖同步寫到磁盤;2是重做日志異步寫到磁盤,即不能完全保證commit時肯定會寫入重做日志文件,只是有這個動作

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM