【问题标题】:Why is my mysql slow_query_log empty?为什么我的 mysql slow_query_log 是空的?
【发布时间】:2012-07-16 03:02:43
【问题描述】:

我在生产机器上进行了以下设置:
mysql服务器5.5.19
活动的(检查 ps 行)my.cnf 包含:

slow_query_log
slow_query_log_file =/opt/app/mysql/log/mysqld-slow.log
long_query_time     = 1
general_log         = OFF
general_log_file    =/opt/app/mysql/log/mysqld.log
log-queries-not-using-indexes

mysql> 显示像“log%”这样的变量; --> 显示“log_queries_not_using_indexes=ON”和“log_slow_queries=ON”

文件/opt/app/mysql/log/mysqld-slow.log存在,属于mysql,长度为零。

问题是,在测试机器上,由于 log-queries-not-using-indexes 选项,我们的低查询日志迅速填满。我们禁用了它,因为它无论如何都需要。现在我们刚刚使用我们的生产数据库并希望确保同样的事情不会发生在我们身上,并找到了相同的设置,但日志是空的。我们不能只是重新启动 mysqld 并到处玩,因为我们现在还活着。我只是想了解为什么日志是空的,尽管配置似乎表明它应该记录lotsa 查询。在生产服务器和测试服务器上运行的一般应用程序是相同的,因此实际上不太可能没有未索引的查询发生。

所以问题是:我可以检查哪些其他配置来查看为什么没有记录任何内容?我不希望它被记录,我只是想确保如果数据库服务器由于某种原因重新启动,它不会突然开始疯狂地记录。我知道我可以通过简单地从 my.cnf 中删除该选项来实现这一点,但我也想了解为什么它现在没有记录。

谢谢, 伊森

【问题讨论】:

    标签: mysql mysql-slow-query-log


    【解决方案1】:

    您可能只是没有运行超过 1 秒的查询。

    您可以运行SELECT SLEEP(10) 之类的查询,因此它肯定会比long_query_time 长并且会被记录。

    也有可能正在将查询写入文件,但您已 rm'd 旧日志文件。所以服务器仍在写入一个未关联的文件描述符。您可以通过lsof 确认这一点。

    您可以强制服务器关闭并重新打开日志文件,而无需重新启动 mysqld。这将放弃取消关联的文件。您可以通过以下两种方式之一执行此操作:FLUSH LOGS 或设置全局变量 slow_query_log=0 然后设置 slow_query_log=1

    【讨论】:

    • 很好的答案。对我来说,这很有效,slow_query_log 开始填充信息
    【解决方案2】:

    MySQL 5.0 版对日志记录容量进行了一些重大更改。

    日志记录由log-output 变量控制。请注意NONE 表示总体上没有日志记录。你可以像这样检查这个变量的值:

    mysql> SHOW VARIABLES LIKE "log_output";
    

    在您的情况下,您希望对文件进行一些缓慢的日志记录,因此可能会执行以下操作:

    mysql> SET GLOBAL log_output=FILE;
    mysql> SET GLOBAL slow_query_log=ON;
    

    【讨论】:

    • log_output 当前为 FILE。所以这不可能是什么都没有被记录的原因......
    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多