mysql日誌

日誌文件

日誌文件記錄mysql數據庫的各類類型活動。經常使用日誌有:錯誤日誌、查詢日誌、慢查詢日誌、二進制日誌。正則表達式

錯誤日誌

錯誤日誌文件對mysql的啓動、運行、關閉過程進行了記錄。sql

定位錯誤日誌文件位置:shell

mysql> show variables like 'log_error';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| log_error     | stderr |
+---------------+--------+
# stderr 表明錯誤輸出;可在my.conf 設置log_error的存貯路徑,如log_error = /data/mysql/mysql-error.log

當mysql數據庫不能正常啓動時,第一個必須查找的文件就是錯誤日誌文件,該文件記錄了出錯信息。數據庫

慢查詢日誌

慢查詢能爲SQL語句的優化帶來很好的幫助。優化

能夠設一個閥值,將運行時間超過改制的全部SQL語句都記錄到慢查詢日誌文件中。該閥值能夠經過參數long_query_time來設置,默認值
爲10,表明10秒。日誌

show VARIABLES like '%long%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
SHOW variables like 'log_slow_queries';

配置:code

slow_query_log = 1     # 開啓慢查詢日誌
long_query_time = 10   # 閥值時間,默認10秒
slow_query_log_file = /data/mysql/mysql-slow.log  # 慢查詢日誌存貯位置
log-queries-not-using-indexes = on # 記錄沒有使用索引的query
show VARIABLES like '%slow_query%';
+---------------------+----------------------------------+
| Variable_name       | Value                            |
+---------------------+----------------------------------+
| slow_query_log      | ON                              |
| slow_query_log_file | /var/lib/mysql/msmaster-slow.log |

注意兩點:server

  • 設置閥值後,mysql會記錄運行時間超過該值的全部SQl語句,但對於運行時間正好等於閥值的狀況並不會記錄。即源代碼裏是判斷大於long_query_time,而非大於等於。
  • log-queries-not-using-indexes 記錄沒有使用索引的query

mysqldumpslow
隨着mysql運行時間累積,慢查詢日誌文件會愈來愈大,此時分析文件就顯得不容易了。mysql提供mysqldumpslow命令:排序

$ /usr/bin/mysqldumpslow /var/lib/mysql/msmaster-slow.log
Reading mysql slow query log from /var/lib/mysql/msmaster-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=0.0 (0), 0users@0hosts

#  -s,排序,c,t,l,r以及ac,at,al,ar分別是按照query次數,時間,lock時間,返回記錄排序。加a就是倒序。
#  -t,top n,跟上數字就是算出top多少條
#  -g,跟正則表達式。

$ /usr/bin/mysqldumpslow -s al -n 10  /var/lib/mysql/msmaster-slow.log; # 查詢鎖定最長的10條sql語句;

mysql5.1開始能夠將慢查詢的日誌記錄放入一張表中,查詢更加直觀。慢查詢表在mysql中名爲slow_log。

mysql> SHOW CREATE TABLE mysql.slow_log;
*************************** 1. row ***************************
Create Table: CREATE TABLE `slow_log` (
  `start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
  `user_host` mediumtext NOT NULL,
  `query_time` time(6) NOT NULL,
  `lock_time` time(6) NOT NULL,
  `rows_sent` int(11) NOT NULL,
  `rows_examined` int(11) NOT NULL,
  `db` varchar(512) NOT NULL,
  `last_insert_id` int(11) NOT NULL,
  `insert_id` int(11) NOT NULL,
  `server_id` int(10) unsigned NOT NULL,
  `sql_text` mediumblob NOT NULL,
    `thread_id` bigint(21) unsigned NOT NULL
  ) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log'

參數log_output指定慢查詢輸出格式,默認FILE,能夠修改成TABLE,而後就能夠查詢slow_log表了。

mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set (0.00 sec)

查詢日誌

查詢日誌記錄全部對mysql數據庫請求的信息,不論這些請求是否獲得正確的執行。默認文件名:主機名.log。

查詢日誌甚至記錄了對access denied的請求。從mysql5.1開始,能夠將查詢日誌的記錄放入mysql庫中的general_log表中,用法與slow_log同樣。

二進制日誌

二進制日誌記錄了對數據庫執行更改的全部操做,不包括select和show操做。二進制還包含了執行數據庫更改操做的時間和執行時間等信息。

主要做用:

  • 恢復:某些數據的恢復須要二進制日誌。
  • 複製

經過配置參數log-bin[=name]啓動二進制日誌。若是不指定name,默認以主機名,後綴爲二進制日誌額序列號,所在路徑爲數據庫所在目錄(datadir);

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
相關文章
相關標籤/搜索