慢查询不记录

The*_*hod 13 mysql performance optimization slow-log

我正在尝试在我们的服务器上启用慢查询日志记录,以便识别任何可以使用优化的查询。听起来很简单,但是我的文件没有被写入。我没有收到任何错误或类似的信息,它似乎没有记录缓慢的查询。我记得在我的配置更改后重新启动 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
Run Code Online (Sandbox Code Playgroud)

文件 /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');`
Run Code Online (Sandbox Code Playgroud)

结果:

10.0000000
/var/run/mysqld/mysqld-slow.log
OFF
Run Code Online (Sandbox Code Playgroud)

显然我的配置更改没有被考虑在内,因为我相信这些是默认值。我很确定我正在修改的 my.cnf 文件正在被解析,就好像我输入了一个无效值,mysql 在重启时会出错。这里会发生什么?

另一个编辑:

在接受@RolandoMySQLDBA 的建议并将我的慢查询配置行移到[mysqld]我的设置下后,似乎正在节省。现在上述 variable_value 查询的结果是:

1.0000000
/var/logs/my.slow.log
ON
Run Code Online (Sandbox Code Playgroud)

但是我仍然没有看到文件 my.slow.log 被写入。我认为这不是权限问题,因为该文件归 mysql 所有,并且我已为该文件的所有用户添加了所有权限。谁能想到这行不通的原因?

编辑:解决了!慢查询日志的路径不正确,它应该是 /var/log/my.slow.log 而不是 /var/log* s */my.slow.log 。感谢大家的帮助,我学会了allot!

Rol*_*DBA 21

我想我得到了答案:

您需要将这些选项放在该[mysqld]部分下

[mysqld]
slow-query-log=1
slow-query-log-file=/var/logs/my.slow.log
long_query_time=1
Run Code Online (Sandbox Code Playgroud)

并重新启动mysql

更新 2013-03-05 16:36 美国东部时间

我不知道为什么仍然会发生这种情况,但请尝试以下操作:

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
Run Code Online (Sandbox Code Playgroud)

然后运行SELECT SLEEP(10);看看它是否降落/var/logs/my.slow.log