1. 程式人生 > 實用技巧 >MySQL 日誌檔案

MySQL 日誌檔案

重做日誌(redo log)

內容:物理格式的日誌,記錄的是物理資料頁面的修改的資訊,其redo log是順序寫入redo log file的物理檔案中去的。
作用:確保事務的永續性。redo日誌記錄事務執行後的狀態,用來恢復未寫入data file的已成功事務更新的資料。防止在發生故障的時間點,尚有髒頁未寫入磁碟,在重啟mysql服務的時候,根據redo log進行重做,從而達到事務的永續性這一特性。
產生:事務開始之後就產生redo log,redo log的落盤並不是隨著事務的提交才寫入的,而是在事務的執行過程中,便開始寫入redo log檔案中。
釋放:當對應事務的髒頁寫入到磁碟之後,redo log的使命也就完成了,重做日誌佔用的空間就可以重用(被覆蓋)。

回滾日誌(undo log)

內容:邏輯格式的日誌,在執行undo的時候,僅僅是將資料從邏輯上恢復至事務之前的狀態,而不是從物理頁面上操作實現的,這一點是不同於redo log的。 
作用:保證資料的原子性,儲存了事務發生之前的資料的一個版本,可以用於回滾,同時可以提供多版本併發控制下的讀(MVCC),也即非鎖定讀。   
產生:事務開始之前,將當前是的版本生成undo log,undo 也會產生 redo 來保證undo log的可靠性。   
釋放:當事務提交之後,undo log並不能立馬被刪除,而是放入待清理的連結串列,由purge執行緒判斷是否由其他事務在使用undo段中表的上一個事務之前的版本資訊,決定是否可以清理undo log的日誌空間。

二進位制日誌(binlog)

內容:邏輯格式的日誌,可以簡單認為就是執行過的事務中的sql語句。但又不完全是sql語句這麼簡單,而是包括了執行的sql語句(增刪改)反向的資訊,也就意味著delete對應著delete本身和其反向的insert;update對應著update執行前後的版本的資訊;insert對應著delete和insert本身的資訊。
作用:用於複製,在主從複製中,從庫利用主庫上的binlog進行重播,實現主從同步。
用於資料庫的基於時間點的還原。
產生:事務提交的時候,一次性將事務中的sql語句(一個事物可能對應多個sql語句)按照一定的格式記錄到binlog中。這裡與redo log很明顯的差異就是redo log並不一定是在事務提交的時候重新整理到磁碟,redo log是在事務開始之後就開始逐步寫入磁碟。因此對於事務的提交,即便是較大的事務,提交(commit)都是很快的,但是在開啟了bin_log的情況下,對於較大事務的提交,可能會變得比較慢一些。
釋放:binlog的預設是保持時間由引數expire_logs_days配置,也就是說對於非活動的日誌檔案,在生成時間超過expire_logs_days配置的天數之後,會被自動刪除

錯誤日誌

  錯誤日誌記錄著mysqld啟動和停止,以及伺服器在執行過程中發生的錯誤的相關資訊。在預設情況下,系統記錄錯誤日誌的功能是關閉的,錯誤資訊被輸出到標準錯誤輸出。

普通查詢日誌

  記錄了伺服器接收到的每一個查詢或是命令,無論這些查詢或是命令是否正確甚至是否包含語法錯誤,general log 都會將其記錄下來 ,記錄的格式為 {Time ,Id ,Command,Argument }。也正因為mysql伺服器需要不斷地記錄日誌,開啟General log會產生不小的系統開銷。 因此,Mysql預設是把General log關閉的。

慢查詢日誌

  慢日誌記錄執行時間過長和沒有使用索引的查詢語句。

  1. 檢視慢查詢時間:
  show variables like “long_query_time”;預設10s

  2. 檢視慢查詢配置情況:
  show status like “%slow_queries%”;

  3. 檢視慢查詢日誌路徑:
  show variables like “%slow%”;

  4. 開啟慢日誌

  檢視已經開啟: