実行環境:CentOS6.6, MySQL 5.7.11
MySQLで、クエリログを確認したい時に、下記の方法があります。
- 実行しているクエリ:
mysql> show full processlist\G;
*************************** 6. row ***************************
Id: <接続識別子、これは、INFORMATION_SCHEMA.PROCESSLIST テーブルの ID カラムの値>
User: <発行したMySQLユーザー>
Host: <発行しているクライエントのホスト名>
db: <データベース名>
Command: <コメンド種類:Query, Connect, Sleep等>。クエリの場合、Queryになる
Time: <現在の状態どれだけ続いている(数秒)>
State: <コメンドの状態:Sending data等>
Info: <クエリ文>
注意: FULL キーワードを使用しない場合、Info フィールドは100 文字のみまで表示されます。
参考:https://dev.mysql.com/doc/refman/5.6/ja/show-processlist.html
2.実行したクエリ
2.1 スレッド情報から、クエリの情報を取得
mysql> select * from INFORMATION_SCHEMA.PROCESSLIST order by id desc limit 10\G;
*************************** 1. row ***************************
ID:
USER:
HOST:
DB:
COMMAND:
TIME:
STATE:
INFO:
このクエリを実行したら、クエリ文(INFOコラム)と実行時間(TIME、数秒)情報が分かります。
参考:https://dev.mysql.com/doc/refman/5.6/ja/processlist-table.html
2.2 ログファイルから見えます。
~]# vim /etc/my.cnf
general_log=ON #クエリログが有効
general_log_file=/home/mysql_query_log/query.log #ログファイルのパース
~]# /etc/init.d/mysqld restart
MySQL設定ファイルの中で、general_onとgeneral_log_fileを設定して、MySQLを再起動すれば実行されているクエリがログに記録されます。
ログを確認する際、
~]# tail -f /home/mysql_query_log/query.log
2016-08-14T17:09:01.663883Z 982 Query SELECT MAX(last_run) AS last_run FROM advertise_domain
を実行すれば、全てのクエリが見えます。実行日時、クエリ文は確認できます。
また、検索語があれば、確認も絞り込みます。
~]# tail -f /home/mysql_query_log/query.log | grep "<検索語>"
- 遅いクエリの確認
~]# vim /etc/my.cnf
slow_query_log=1 #0:無効、1:有効
slow_query_log_file=/home/mysql/mysqld-slow.log #ログファイルのパース
long_query_time=5 #5秒以上かかったクエリは遅いクエリになり、ディフォルトは10秒
~]# /etc/init.d/mysqld restart
このログは、実行日時、実行時間、クエリ文の確認ができます。
参考:
- https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_slow_query_log
- https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_slow_query_log_file
- https://dev.mysql.com/doc/refman/5.6/ja/server-system-variables.html#sysvar_long_query_time
以上です。よろしくお願いします。