MySQL中普通、慢查詢日誌的差別

一个新手
發布: 2017-09-08 10:12:49
原創
1447 人瀏覽過


Intro

<br/>
登入後複製

<br/>

#之前的一篇分享提到,MySQL的日誌類型可以分為三種,錯誤日誌(error_log),查詢日誌(query_log),和二進位日誌(binary_log),error_log的介紹與用法詳見MySQL日誌之error_log,本文主要介紹general_log和slow_query_log的原理和用法。

通用查詢日誌

通用查詢日誌(general_log)主要用於查詢各client連接資料庫時的相關資訊與在資料庫上執行的SQL語句,設定方法為:

1、查詢通用查詢日誌是否開啟與其存放路徑:

mysql> show variables like "general_log%";
+------------------+------------------------------+| Variable_name    | Value                        |
+------------------+------------------------------+| general_log      | OFF                           |
| general_log_file | /var/lib/mysql/localhost.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)
登入後複製

螢幕輸出中general_loggeneral_log_file記錄了目前通用查詢日誌的開關狀態與路徑。

2、開啟通用查詢日誌

    set global general_log = ON
登入後複製

查詢是否成功:

mysql> show variables like "general_log%";
+------------------+------------------------------+| Variable_name    | Value                        |
+------------------+------------------------------+| general_log      | ON                           |
| general_log_file | /var/lib/mysql/localhost.log |
+------------------+------------------------------+
2 rows in set (0.00 sec)
登入後複製

成功。

退出一下看有沒有生成並且正確記錄:

[root@localhost ~]# cat /var/lib/mysql/localhost.log
/usr/sbin/mysqld, Version: 5.7.19 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
2017-08-14T09:33:11.364650Z     5 Quit  
2017-08-14T09:33:20.671113Z     6 Connect   root@localhost on  using Socket
2017-08-14T09:33:20.671323Z     6 Query select @@version_comment limit 1
2017-08-14T09:33:22.964610Z     6 Query show variables like &#39;%log%&#39;
2017-08-14T09:33:24.574224Z     6 Quit
登入後複製

成功,並且我們可以看到,log不僅記錄了SQL命令,同時還包括了執行時間、Id、命令類型等相關資料

慢查詢日誌

慢查詢日誌記錄了SQL語句時間超過了預設的long_query_time的語句,在資料量較大的情況下,可以看看慢查詢日誌中有哪些語句需要進行最佳化。

1、慢查詢日誌的設定

慢查詢日誌的設定可以在資料庫設定檔my.cnf中查到:

[root@localhost ~]# cat /etc/my.cnf | grep -E &#39;long|slow|not_using_indexes&#39;long_query_time = 1#log-slow-queries = /var/log/mysql/slow.loglog_queries_not_using_indexes
登入後複製

可以看到:

long_query_time = 1的意思是SQL語句執行時間超過1s的,對其進行記錄;<br/>log-slow- queries = /var/log/mysql/slow.log是對慢查詢日誌路徑的設定;<br/>log_queries_not_using_indexes意思是不使用索引的語句,可以縮小記錄的目標

實際設定與通用查詢日誌相同,在mysql互動介面中輸入指令開啟慢查詢日誌:

    set slow_query_log = ON
登入後複製

2、查詢是否成功

[root@localhost ~]# cat /var/lib/mysql/localhost-slow.log
/usr/sbin/mysqld, Version: 5.7.19 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument
登入後複製

成功。

但注意,slow_query_log可能會記錄到與使用者權限和密碼相關的語句,因此在使用慢查詢日誌檔案時請注意日誌的安全保存。

以上是MySQL中普通、慢查詢日誌的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板