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


88

我按照这里的说明进行操作:http : //crazytoon.com/2007/07/23/mysql-changing-runtime-variables-with-out-restarting-mysql-server/,但这似乎仅设置了阈值。

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

根据MySQL的文档

如果没有为--log-slow-queries提供file_name值,则默认名称为 
host_name-slow.log。服务器将在数据目录中创建文件,除非
给出绝对路径名以指定其他目录。 

跑步

显示变量

没有指示任何日志文件路径,并且我在服务器上看不到任何慢查询日志文件...

编辑

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

SET GLOBAL log_slow_queries = 1;

但我得到:错误1238(HY000):变量'log_slow_queries'是只读变量

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


5
为什么不在开发箱上测试呢?
马丁

Answers:


93

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

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


8
FLUSH SLOW LOGS在5.5中可用!
卡森·莱因克

在10.0.36-MariaDB上也为我工作。SET GLOBAL slow_query_log = 'OFF';也可以正常工作。FLUSH LOGS在任何情况下都没有必要。
rinogo

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
这是log_slow_queries而不是数慢查询
娜奥米·

6
另外,您必须在以下情况之前手动创建日志文件:sudo mkdir /var/log/mysql sudo touch /var/log/mysql/slow-query.log sudo chown -R _mysql /var/log/mysql/
Charles

1
log_slow_queries在MySQL 5.1.29中被弃用slow-query-log。《MySQL 5.1参考手册》有更多详细信息。
Xeoncross

18

查找日志是否已启用?

SHOW VARIABLES LIKE '%log%';

设置日志:

SET GLOBAL general_log = 'ON'; 

SET GLOBAL slow_query_log = 'ON'; 


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

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

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

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


我得到:ERROR 1193(HY000):未知的系统变量'slow_query_log'
mmattax

您正在运行什么版本的MySQL?
伊恩·格雷戈里

3

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

要开始登录表而不是文件:

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/


1

这应该适用于mysql> 5.5

显示变量,如“%long%”;

SET GLOBAL long_query_time = 1;

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.