MySQLのクエリログ・スローログ出力

MySQL で実行されたクエリ、時間のかかっているクエリをログ出力したい。

環境

概観

出力の指定

方法はいくつかあるらしい。

  • 起動オプションで指定する
  • コンフィグで指定する

ここでは、コンフィグで指定する方法を採った。

出力先
  • ファイル
  • テーブル
手順

コンフィグで指定する場合、以下の手順を実施。

NO手順WINDOWSの場合LINUXの場合
1. 設定する
my.ini

my.cnf
2. 出力権限付与 フォルダのアクセス権なければ付与
touch /var/log/mysql/query.log
chown mysql.mysql /var/log/mysql/query.log
chmod 640 /var/log/mysql/query.log
3. MySQL再起動 コンパネ-サービスで再起動
service mysql restart

コンフィグの指定方法

クエリログとスローログ共通設定
キー 説明 設定値 設定例 補足
log_output ログ出力先 TABLE/NONE/FILE log_output=TABLE default=TABLE。 TABLE,FILEと記載すると、両方に出力。
クエリログ(一般ログ)

◇設定ファイルの指定方法
[mysqld]セクション

キー 説明 設定値 設定例
general_log 出力要否 出力する場合、1(ONでもよいらしい) general_log=1
general_log_file 出力先ファイル名 ファイル名 general_log_file="C:/mysql/query.log"


◇log_output=TABLEの場合の出力先
<>

Field Type Null Key Default Extra
event_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
user_host mediumtext NO NULL
thread_id int(11) NO NULL
server_id int(10) unsigned NO NULL
command_type varchar(64) NO NULL
argument mediumtext NO NULL
スロークエリログ

◇設定ファイルの指定方法
[mysqld]セクション

キー 説明 設定値 設定例
slow_query_log 出力要否 出力する場合、1(ONでもよいらしい) slow_query_log=1
long_query_time long query とみなす閾値 秒数 long_query_time=0.1
slow_query_log_file スローログ出力先 ログファイル名 slow_query_log_file="c:/mysql/slow.log"
min_examined_row_limit n回以上実行されたクエリを出力 回数 min_examined_row_limit=1000
log-queries-not-using-indexes インデックスを使用しないクエリを出力 1 log-queries-not-using-indexes=1


◇log_output=TABLEの場合の出力先
<>

Field Type Null Key Default Extra
start_time timestamp NO CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
user_host mediumtext NO NULL
query_time time NO NULL
lock_time time NO NULL
rows_sent int(11) NO NULL
rows_examined int(11) NO NULL
db varchar(512) NO NULL
last_insert_id int(11) NO NULL
insert_id int(11) NO NULL
server_id int(10) unsigned NO NULL
sql_text mediumtext NO NULL


◇スローログの例

Time Id Command Argument
# Time: 120109 22:34:00
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 0.003000 Lock_time: 0.000000 Rows_sent: 92 Rows_examined: 92
SET timestamp=1326116040;
select * from general_log;