0

我在生产机器上有以下设置:
Mysql server 5.5.19
the active(检查 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 选项,我们的 eslow 查询日志迅速填满。我们禁用了它,因为它无论如何都需要。现在我们刚刚使用我们的生产数据库并希望确保同样的事情不会发生在我们身上,并找到了相同的设置,但日志是空的。我们不能只是重新启动 mysqld 并到处玩,因为我们现在还活着。我只是想了解为什么日志是空的,尽管配置似乎表明它应该记录lotsa 查询。在生产和测试服务器上运行的一般应用程序是相同的,因此实际上不太可能没有发生未索引的查询。

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

谢谢,伊桑

4

2 回答 2

3

您可能根本没有运行超过 1 秒的查询。

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

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

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

于 2014-09-24T18:26:34.020 回答
1

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;
于 2012-07-17T20:16:28.893 回答