mysql 日誌

   innodb 的事務日誌默認情況下會有兩個文件:ib_logfile0和ib_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時肯定會寫入重做日誌文件


log_output file 日誌輸出類型

日誌的輸出位置一般有三種方式:file(文件),table(表),none(不保存);其中前兩個輸出位置可以同時定義,none表示是 開啓日誌功能但是記錄日誌信息。file就是通過general_log_file |/mydata/data/stu18.log 等方式定義的,而輸出位置定義爲表時查看日誌的內容方式爲:

use mysql--->show tables--->general_log

慢查詢日誌是用來記錄執行時間超過指定時間的查詢語句。通過慢查詢日誌,可以查找出哪些查詢語句的執行效率很低,以便進行優化

事務日誌:

  事務日誌(InnoDB特有的日誌)可以幫助提高事務的效率。使用事務日誌,存儲引擎在修改表的數據時只需要修改其內存拷貝,再把改修改行爲 記錄到持久在硬盤上的事務日誌中,而不用每次都將修改的數據本身持久到磁盤。事務日誌採用追加的方式,因此寫日誌的操作是磁盤上一小塊區域內的順序 I/O,而不像隨機I/O需要在磁盤的多個地方移動磁頭,所以採用事務日誌的方式相對來說要快得多。事務日誌持久以後,內存中被修改的數據在後臺可以慢慢 的刷回到磁盤。目前大多數的存儲引擎都是這樣實現的,我們通常稱之爲預寫式日誌,修改數據需要寫兩次磁盤.

二進制日誌:

  刪除二進制日誌:PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }

  TO'log_name'表示把這個文件之前的其他文件都刪除掉,也可使用BEFORE datetime_expr指定把哪個時間之前的二進制文件刪除了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章