事象
表題の通り。
スロークエリを確認しようと思ったら出力されずにハマったのでメモ。
スロークエリの出力設定
サーバは再起動したくなかったのでset globals で対応。
set global slow_query_log = 1;
set global long_query_time = 5; --5秒以上なら出力
set global slow_query_log_file ='slow_query.log'; -- 出力先
設定を確認
SELECT *
FROM information_schema.global_variables
WHERE VARIABLE_NAME = "slow_query_log"
OR VARIABLE_NAME = "long_query_time"
OR VARIABLE_NAME = "slow_query_log_file";
+---------------------+---------------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------------+---------------------+
| SLOW_QUERY_LOG | ON |
| LONG_QUERY_TIME | 5.000000 |
| SLOW_QUERY_LOG_FILE | slow_query.log |
+---------------------+---------------------+
3 rows in set (0.00 sec)
正常に設定されました。
出力先にもちゃんとログファイルが作成されています。
実際に確認
設定が完了したので、実際に重たいクエリを実行。
その後、ログファイルを確認。
ファイルの権限も問題ないのに出力されない・・・。
原因
「log_output」が "NONE"になっていました・・・。
FILEにしてやると正常に出力されました。
set global log_output = 'FILE';
めでたしめでたし。
ちなみに、TABLEにするとslow_logテーブルに出力されるようになりました。
set global log_output = 'TABLE';
SELECT * FROM mysql.slow_log;