我在生产机器上进行了以下设置:
Mysql服务器5.5.19
my.cnf包含的活动(检查ps行):
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并玩游戏,因为我们现在就住了。我只是想了解为什么日志是空的虽然配置似乎表明它应该记录很多查询。生产和测试服务器上运行的一般应用程序是相同的,因此实际上不会发生未编入索引的查询。
所以问题是:我可以检查哪些其他配置以查看为什么没有记录任何内容?我不希望它被记录,我只是想确保如果由于某种原因重新启动数据库服务器,它不会突然开始像疯了一样开始记录。我知道我可以通过简单地删除my.cnf中的选项来实现这一点,但我也想了解它为什么不立即登录。
谢谢, 乙
答案 0 :(得分: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;
答案 1 :(得分:0)
您可能只有超过1秒的查询时间。
您可以运行SELECT SLEEP(10)
之类的查询,以确保其长度超过long_query_time
并将被记录。
它也可能正在向文件中写入查询,但是你有旧的日志文件。因此服务器仍在写入一个解除关联的文件描述符。您可以使用lsof
进行确认。
您可以强制服务器关闭并重新打开日志文件,而无需重启mysqld。这将放弃解除关联的文件。您可以通过以下两种方式执行此操作:FLUSH LOGS
或者设置全局变量slow_query_log=0
,然后设置slow_query_log=1
。