1. 程式人生 > >MySQL日誌知識要點

MySQL日誌知識要點

啟用 日誌文件 調度器 目的 實現 組成 文件的 file 相關

MySQL日誌主要包含:錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進制日誌;

日誌是mysql數據庫的重要組成部分。日誌文件中記錄著mysql數據庫運行期間發生的變化;也就是說用來記錄mysql數據庫的客戶端連接狀況、SQL語句的執行情況和錯誤信息等。當數據庫遭到意外的損壞時,可以通過日誌查看文件出錯的原因,並且可以通過日誌文件進行數據恢復。

錯誤日誌

在mysql數據庫中,錯誤日誌功能是默認開啟的。並且,錯誤日誌無法被禁止。默認情況下,錯誤日誌存儲在mysql數據庫的數據文件中。錯誤日誌文件通常的名稱為hostname.err。其中,hostname表示服務器主機名。

錯誤日誌信息可以自己進行配置的,錯誤日誌所記錄的信息是可以通過log-error和log-warnings來定義的,其中log-err是定義是否啟用錯誤日誌的功能和錯誤日誌的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日誌中。默認情況下錯誤日誌大概記錄以下幾個方面的信息:服務器啟動和關閉過程中的信息(未必是錯誤信息,如mysql如何啟動InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、服務器運行過程中的錯誤信息、事件調度器運行一個事件時產生的信息、在從服務器上啟動服務器進程時產生的信息。

查詢日誌

默認情況下查詢日誌是關閉的。由於查詢日誌會記錄用戶的所有操作,其中還包含增刪查改等信息,在並發操作大的環境下會產生大量的信息從而導致不必要的磁盤IO,會影響mysql的性能的。如若不是為了調試數據庫的目的建議不要開啟查詢日誌。

查看查詢日誌是否開啟:

mysql> SHOW GLOBAL VARIABLES LIKE ‘%log%‘;

慢查詢日誌

慢查詢日誌是用來記錄執行時間超過指定時間的查詢語句。通過慢查詢日誌,可以查找出哪些查詢語句的執行效率很低,以便進行優化。一般建議開啟,它對服務器性能的影響微乎其微,但是可以記錄mysql服務器上執行了很長時間的查詢語句。可以幫助我們定位性能問題的。

查看慢查詢日誌的定義:

mysql> SHOW GLOBAL VARIABLES LIKE ‘%log%‘;
| slow_query_log | OFF #定義慢查詢日誌的
| slow_query_log_file |/mydata/data/stu18-slow.log #輸出方式為file(文件)時定義慢查詢日誌的位置

事務日誌

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

如果數據的修改已經記錄到事務日誌並持久化,但數據本身還沒有寫回磁盤,此時系統崩潰,存儲引擎在重啟時能夠自動恢復這部分修改的數據。具有的恢復方式則視存儲引擎而定。

查看事務日誌的定義:

mysql> SHOWGLOBAL VARIABLES LIKE ‘%log%‘;

事務日誌:

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

如果數據的修改已經記錄到事務日誌並持久化,但數據本身還沒有寫回磁盤,此時系統崩潰,存儲引擎在重啟時能夠自動恢復這部分修改的數據。具有的恢復方式則視存儲引擎而定。

查看事務日誌的定義:

mysql> SHOWGLOBAL VARIABLES LIKE ‘%log%‘;

二進制日誌

二進制日誌也叫作變更日誌,主要用於記錄修改數據或有可能引起數據改變的mysql語句,並且記錄了語句發生時間、執行時長、操作的數據等等。所以說通過二進制日誌可以查詢mysql數據庫中進行了哪些變化。一般大小體積上限為1G。

二進制開啟狀態:

mysql> showglobal variables like "%log_bin%";

二進制日誌相關的參數:

mysql> showglobal variables like "%log%";

二進制日誌定義方式:

其一、log_bin可以直接定義為文件路徑,也可以為ON|OFF。

其二、通過編輯my.cnf中的log-bin選項可以開啟二進制日誌



MySQL日誌知識要點