日誌文件記錄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
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/ | +---------------+-----------------+