web-dev-qa-db-ja.com

遅いクエリがログに記録されない

最適化を使用できるクエリを特定するために、サーバーで低速のクエリロギングを有効にしようとしています。簡単に聞こえますが、ファイルが書き込まれていません。エラーなどは発生しませんが、遅いクエリをログに記録していないようです。設定を変更した後、mysqlを再起動することを覚えています。

MySQL Ver 5.1.61を使用しています。これがmy.cnfにあるものです。

_slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1
_

ファイル/var/logs/my.slow.logにはmysqlが所有者として含まれており、デバッグのために、ログファイルのすべてに読み取り/書き込みを付与しました。

上記のlong_query_timeが1に設定されているのは、機能しているかどうかを確認するためです。低く設定してみましたが(0.3など)、まだ何も記録されていません。私のアプリが実行しているクエリは1秒以上かかること、そしてテスト用にターミナルでクエリ(SELECT sleep(10);)を意図的に実行しましたが、ログはまだ空です。

私は、これが機能しているはずであることがわかるものから、ドキュメントを調べました。誰かが私が間違っていることについて何か提案がありますか?アドバイスをいただければ幸いです。

編集:コメントで尋ねられたように、私はクエリを実行しました:

_ `SELECT variable_value FROM information_schema.global_variables WHERE variable_name IN ('slow_query_log','slow_query_log_file','long_query_time');`
_

結果:

_10.0000000
/var/run/mysqld/mysqld-slow.log
OFF
_

これらはデフォルトであると思うので、明らかに私の構成変更は考慮されていません。私が変更しているmy.cnfファイルが無効な値を入力したかのように解析されているのは確かです。mysqlは再起動時にエラーになります。ここで何が起こっているのでしょうか?

別の編集:

@RolandoMySQLDBAのアドバイスを受け取り、スロークエリの構成行を_[mysqld]_の下に移動すると、設定が保存されているようです。上記のvariable_valueクエリの結果は次のとおりです。

_1.0000000
/var/logs/my.slow.log
ON
_

しかし、私はまだmy.slow.logファイルが書き込まれているのを見ていません。ファイルはmysqlが所有しているため、権限の問題ではないと思いますandファイルのすべてのユーザーにすべての権限を追加しました。これが機能しない理由を誰かが考えることができますか?

編集:解決しました!スロークエリログへのパスが正しくありませんでした。/var/log*sではなく、/ var/log/my.slow.logである必要があります*/my.slow.log。助けてくれてありがとう、分かち合いました!

13
TheMethod

私は答えを得たと思います:

これらのオプションを_[mysqld]_セクションの下に置く必要があります

_[mysqld]
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1
_

そしてmysqlを再起動します

UPDATE 2013-03-05 16:36 EST

これがまだ起こっている理由はわかりませんが、これを試してください:

_service mysql stop
rm -f /var/logs/my.slow.log
touch /var/logs/my.slow.log
chown mysql:mysql /var/logs/my.slow.log
service mysql start
_

次にSELECT SLEEP(10);を実行し、それが_/var/logs/my.slow.log_に到達するかどうかを確認します

21
RolandoMySQLDBA