1. 程式人生 > 實用技巧 >Mysql日誌詳解

Mysql日誌詳解

1. 錯誤日誌:

  • mysql執行過程中的錯誤資訊/告警資訊
  • event scheduler執行時所產生資訊
  • mysq啟動和停止過程中產生的資訊
  • 主從複製結構中,重從伺服器IO複雜執行緒的啟動資訊
mysql> show variables where variable_name="log_error" or variable_name="log_warnings";
+---------------+---------------------+
| Variable_name | Value               |
+---------------+---------------------+
| log_error | /var/log/mysqld.log | | log_warnings | 2 | +---------------+---------------------+ 2 rows in set (0.00 sec)

log_error:錯誤日誌的存放路徑

log_warnings:表示是否記錄告警資訊到錯誤日誌,0表示不記錄告警資訊,1表示記錄告警資訊,大於1表示各類告警資訊,例如有關網路故障的資訊和重新連線資訊寫入錯誤日誌

2. 查詢日誌

查詢自然--general log,查詢日誌記錄了資料庫執行的命令,不管這些語法是否正確,都會被記錄。由於資料庫操作命令非常多而且比較頻繁,所以開啟了查詢日誌以後,資料庫可能需要不停的寫入查詢,這樣會增大伺服器的IO壓力,增加很多的系統開銷,所以預設情況下,mysql的查詢日誌是沒有開啟的,但是開啟查詢日誌也有助於我們分析那些語句執行密集,執行密集的select語句對應的資料是否能夠被快取,查詢日誌也可以幫助我們分析問題,所以,我們可以更具實際情況決定是否開啟查詢日誌,如果需要可以手動開啟。

mysql> show variables where variable_name like "%general_log%" or variable_name = "log_output";
+------------------+-------------------------+
| Variable_name    | Value                   |
+------------------+-------------------------+
| general_log      | OFF                     |
| general_log_file |
/data/mysqldata/jan.log | | log_output | FILE | +------------------+-------------------------+ 3 rows in set (0.00 sec)

general_log:表示查詢日誌是否開啟,ON表示開啟,OFF表示未開啟,預設未OFF

log_output:表示當查詢日誌開啟以後,以哪種方式存放。FILE--檔案,TABLE--表mysql.general_log中(慢查詢存放於表mysql.slow_log),FILE,TABLE表示同時存放於檔案和表中,NONE表示不記錄日誌。log_output不僅控制查詢日誌,還控制慢查詢日誌。

general_log_file:表示查詢日誌存放於檔案的路徑

3. 慢查詢日誌

某些sql語句執行完畢所花費的時間特別長,我們將這種響應比較慢的語句記錄在慢查詢日誌中,只要超過指定時間的sql語句,都稱為“慢查詢”,被記錄在慢查詢日誌中。慢查詢日誌預設情況下是關閉的,預設設定下,超過10s的語句才會被記錄到慢查詢日誌中。

mysql> show  variables where variable_name like 'slow_query%' or variable_name='long_query_time' or variable_name='log_queries_not_using_indexes';
+-------------------------------+------------------------------+
| Variable_name                 | Value                        |
+-------------------------------+------------------------------+
| log_queries_not_using_indexes | OFF                          |
| long_query_time               | 10.000000                    |
| slow_query_log                | OFF                          |
| slow_query_log_file           | /data/mysqldata/jan-slow.log |
+-------------------------------+------------------------------+
4 rows in set (0.00 sec)

slow_query_log:表示查詢日誌是否開啟,ON表示開啟,OFF表示未開啟,預設OFF

slow_query_log_file:表示查詢日誌存放於檔案的路徑

long_query_time:表示多長時間的查詢被認為"慢查詢",預設10s

log_queries_not_using_indexes:表示如果執行的sql語句沒有使用到索引,也被記錄到慢查詢日誌,OFF表示不記錄,ON表示記錄,預設OFF

4.二進位制日誌

二進位制日誌是一個二進位制檔案,記錄了對MySQL資料庫執行更改的所有操作,並且記錄了語句發生時間、執行時長、操作資料等其他額外資訊,但是他不記錄SELECT、SHOW等那些不改變資料庫的SQL語句。二進位制日誌主要用於資料庫恢復和主從複製,以及審計操作。

mysql> show variables where variable_name="log_bin" or variable_name="log_bin_basename" or variable_name="max_binlog_size" or 
variable_name="log_bin_index" or variable_name="binlog_format" or variable_name="sql_log_bin" or variable_name="sync_binlog"; +------------------+------------+ | Variable_name | Value | +------------------+------------+ | binlog_format | ROW | | log_bin | OFF | | log_bin_basename | | | log_bin_index | | | max_binlog_size | 1073741824 | | sql_log_bin | ON | | sync_binlog | 1 | +------------------+------------+ 7 rows in set (0.00 sec)

log_bin:表示二進位制日誌是否開啟,ON表示開啟,OFF表示未開啟,預設OFF

log_bin_basename:二進位制日誌檔案字首名,二進位制日誌就記錄在該檔案中

max_binlog_size:二進位制日誌檔案的最大大小,超過此大小,二進位制檔案會自動滾動

log_bin_index:二進位制日誌檔案索引檔名,用於記錄所有的二進位制檔案

binlog_format:決定了二進位制日誌的記錄方式,STATEMENT以語句的形式記錄,ROW以資料修改的形式記錄,MIXED以語句和資料修改混合形式記錄

sql_log_bin:決定是否對二進位制日誌進行日誌記錄,ON表示執行記錄,OFF表示不執行記錄,預設OFF,這個是會話級別變數可以通SET sql_log_bin = {0|1}來改變該變數值

sync_binlog:決定二進位制日誌寫入磁碟時機,如果sync_binlog為0,作業系統來決定什麼時候寫入磁碟,如果sync_binlog為N(N=1,2,3..),則每N次事務提交後,都立即將記憶體中的二進位制日誌寫入磁碟,如何選擇取決於安全性與效能的權衡.

二進位制日誌的三種記錄方式

STATEMENT:記錄對資料庫做出修改的語句,比如,update A set test='test',如果使用statement模式,那麼這條update語句將被記錄到二進位制日誌中,使用statement模式時,優點是binlog日誌量少,IO壓力小,效能高,缺點是為了儘可能一致的還原操作,除了記錄語句本身外,可能還需要記錄一些相關資訊,而且,在使用一些特定函式時,並不能保證恢復操作與記錄完全一致

ROW:記錄對資料庫做出的修改的語句所影響到的資料行以及這些行的修改,比如,update A set test='test',如果使用row模式,那麼這條update所影響到的行所對應的修改,將會記錄在binlog中,使用row模式時,優點是能完還原和複製被日誌記錄時的操作,缺點是日誌量較大,IO壓力比較大,效能消耗比較大

MIXED:混合上述兩種模式,一般使用statement方式進行記錄,如果遇到一些特殊函式使用row方式進行記錄,這種記錄方式稱為mixed