如何在不重启MySQL的情况下启用MySQL慢查询日志?

时间:2010-03-08 18:44:10

标签: mysql

我按照此处的说明操作:http://crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/但似乎只设置了阈值。

我是否需要做其他事情,例如设置文件路径?

根据MySQL的文档

If no file_name value is given for --log-slow-queries, the default name is 
host_name-slow.log. The server creates the file in the data directory unless 
an absolute path name is given to specify a different directory. 

运行

SHOW VARIABLES

不表示任何日志文件路径,我在服务器上看不到任何慢速查询日志文件...

修改

看起来我正在使用服务器版本5.0.77,所以我需要这样做:

SET GLOBAL log_slow_queries = 1;

但我得到:ERROR 1238(HY000):变量'log_slow_queries'是一个只读变量

我假设我需要重启服务器并在配置中设置log_slow_queries?

8 个答案:

答案 0 :(得分:90)

尝试SET GLOBAL slow_query_log = 'ON';,也许FLUSH LOGS;

这假设您使用的是MySQL 5.1或更高版本。如果您使用的是早期版本,则需要重新启动服务器。这在MySQL Manual中有记录。您可以在配置文件或命令行中配置日志。

答案 1 :(得分:28)

对于版本的慢速查询< 5.1,以下配置对我有用:

log_slow_queries=/var/log/mysql/slow-query.log
long_query_time=20
log_queries_not_using_indexes=YES

另请注意,将其放在配置文件的[mysqld]部分下,然后重新启动mysqld

答案 2 :(得分:18)

是否启用查找日志?

SHOW VARIABLES LIKE '%log%';

设置日志: -

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 

答案 3 :(得分:7)

MySQL Manual - slow-query-log-file

这声称您可以运行以下命令来设置慢速日志文件(5.1.6以后):

set global slow_query_log_file = 'path';

变量slow_query_log只控制它是否被启用。

答案 4 :(得分:6)

这些工作

SET GLOBAL LOG_SLOW_TIME = 1;
SET GLOBAL LOG_QUERIES_NOT_USING_INDEXES = ON;

我的设置5.1.42

中断了
SET GLOBAL LOG_SLOW_QUERIES = ON;
SET GLOBAL SLOW_QUERY_LOG = ON;
set @@global.log_slow_queries=1;

http://bugs.mysql.com/bug.php?id=32565

看起来最好的方法是将log_slow_time设置得非常高,从而“关闭”慢速查询日志。降低log_slow_time以启用它。对log_queries_not_using_indexes使用相同的技巧(设置为OFF)。

答案 5 :(得分:5)

我认为问题在于确保MySQL服务器拥有该文件的权限并可以对其进行编辑。

如果您可以访问该文件,则可以尝试设置:
SET GLOBAL slow_query_log = 1;

如果没有,您可以在更改配置文件后始终“重新加载”服务器。在linux上它通常是/etc/init.d/mysql reload

答案 6 :(得分:2)

如果要在表中启用常规错误日志和慢查询错误日志而不是文件

开始登录表而不是文件:

set global log_output = “TABLE”;

启用常规和慢速查询日志:

set global general_log = 1;
set global slow_query_log = 1;

查看日志:

select * from mysql.slow_log;
select * from mysql.general_log;

有关详细信息,请访问此链接

http://easysolutionweb.com/technology/mysql-server-logs/

答案 7 :(得分:1)

这应该适用于mysql> 5.5

  

显示变量如'%long%';

     

SET GLOBAL long_query_time = 1;