Mysql慢速查询日志已打开但不logging任何内容

运行:
Ubuntu服务器10.04
MySQL 5.1.41

我在/etc/mysql/my.cnf中有以下内容

slow_query_log = 1 slow_query_log_file = /var/log/mysqld/log-slow-queries.log long_query_time = 1 

日志文件应该是可写的

 drwxrwxrwx 2 mysql mysql 4096 2010-10-20 13:41 mysqld -rwxrwxrwx 1 mysql mysql 0 2010-10-20 13:41 log-slow-queries.log 

没有什么显示在日志或mysql.slow_log表中。 它看起来像启用

 mysql> show variables like '%SLOW%'; +---------------------+--------------------------------------+ | Variable_name | Value | +---------------------+--------------------------------------+ | log_slow_queries | ON | | slow_launch_time | 2 | | slow_query_log | ON | | slow_query_log_file | /var/log/mysqld/log-slow-queries.log | +---------------------+--------------------------------------+ 4 rows in set (0.00 sec) 

这是否意味着我没有缓慢的查询? 我试过运行select sleep(3); 但是不显示。

是否有一个查询,我可以运行,将显示在日志中,如果一切正确configuration?

慢查询日志包含所有执行时间超过long_query_time秒的SQL语句,并且(至less需要MySQL 5.1.21)至less需要min_examined_row_limit行才能被检查。

http://dev.mysql.com/doc/refman/5.1/en/slow-query-log.html

你的min_examined_row_limit设置为?

创build一个长时间运行的查询最简单的方法是在足够多的表上使用笛卡尔连接,以使一团糟。 创build一个包含约50个条目的testing表(或查找现有的testing表)。 然后运行

 SELECT t4.* FROM testtable t1, testtable t2, testtable t3, testtable t4, testtable t5 limit 312499999,1; 

这将会持续很长时间,然后从testing表中打印一条logging,并显示“1排(1分31.45秒)”的信息。 限制/偏移是强制服务器计算第一行312499999行,但只显示一行,而不是所有312500000行(50 ^ 5),因为这可能需要几天才能打印出多行数据。

如果你没有完整的50行,设置偏移量来计算(*)^(连接数)-1。 不要对正在使用的服务器执行此操作(或者使用较less的行数,以便在几秒钟内完成,而不是让服务器停顿一分半)

有可能mysql正在login到一个表。 尝试运行

 select * from mysql.slow_log; 

@大卫,它实时logging,但它不包括抓表锁的时间。

正如@Bryan指出的那样,查询需要检查一定数量的行才能被logging。 我想这就是为什么睡眠(3)没有logging。

configuration看起来正确。 你有没有“正确”的文件? 我看到你在“/var/log/mysqld/log-slow-queries.log”目录下有一个“mysqld”。 顺便说一下,日志文件不应该有“777”的权限:)

我很想看看问题如何解决。

我有同样的问题。 解读它后阅读: https : //stackoverflow.com/a/11861305/686304

为了启用缓慢的查询日志logging,您首先需要启用通用日志logging。

只需将'general_log'设置为'ON'(在my.cnf中)

 general_log = 1