如何启用MySQL查询日志?

MySQL如何开启记录从客户端收到的每条SQL查询语句和提交时间的功能? 我可以在phpmyadmin或NaviCat中这样做吗? 如何分析日志?< / p >

488435 次浏览

首先,请记住,这个日志文件在繁忙的服务器上可能会变得非常大。

mysql <5.1.29:

要启用查询日志,将其放在[mysqld]部分的/etc/my.cnf

log   = /path/to/query.log  #works for mysql < 5.1.29

另外,从MySQL控制台启用它

SET general_log = 1;

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

mysql 5.1.29+

在mysql 5.1.29+中,log选项已弃用。要指定日志文件并启用日志记录,请在my.cnf的[mysqld]部分中使用这个:

general_log_file = /path/to/query.log
general_log      = 1

另外,要从MySQL控制台打开日志记录(还必须以某种方式指定日志文件位置,或者找到默认位置):

SET global general_log = 1;

还要注意,还有其他选项可以只记录慢速查询或不使用索引的查询。

可以禁用或启用常规查询日志(记录所有查询)

SET GLOBAL general_log = 1 # (or 0 to disable)

看看另一个相关问题的答案。它展示了如何在不重新启动的情况下启用、禁用和查看活动服务器上的日志。

记录mysql中的所有查询


以下是摘要:

如果你不想或者不能重新启动MySQL服务器,你可以在你正在运行的服务器上这样做:

  • 创建日志表(参见回答)

  • 启用数据库查询日志功能 (注意,字符串'table'应该按字面意思放置,而不是用任何表名代替。由于尼古拉斯·皮克林) < / p >

SET global general_log = 1;
SET global log_output = 'table';
  • 查看日志
select * from mysql.general_log;
  • 禁用数据库查询日志
SET global general_log = 0;
  • 不禁用地清除查询日志
TRUNCATE mysql.general_log

在phpMyAdmin 4.0,你去状态>监视器。在那里,您可以启用慢查询日志和常规日志,查看实时监视器,选择图表的一部分,查看相关查询并分析它们。

当我想快速优化不同的页面加载时,我使用这种方法进行日志记录。 这是一个小提示…

记录到表

SET global general_log = 1;
SET global log_output = 'table';

然后你可以从我的mysql.general_log表中选择来检索最近的查询。

然后我可以在mysql.log上做一些类似tail -f的事情,但有更多的改进…

select * from mysql.general_log
where  event_time  > (now() - INTERVAL 8 SECOND) and thread_id not in(9 , 628)
and argument <> "SELECT 1" and argument <> ""
and argument <> "SET NAMES 'UTF8'"  and argument <> "SHOW STATUS"
and command_type = "Query"  and argument <> "SET PROFILING=1"

这使得它很容易看到我的查询,我可以尝试和削减。我使用8秒的间隔来只获取最近8秒内执行的查询。

在Windows上,你可以简单地转到

C:\wamp\bin\mysql\mysql5.1.53\my.ini

my.ini中插入这一行

general_log_file = c:/wamp/logs/mysql_query_log.log

my.ini文件最终看起来像这样

...
...
...
socket      = /tmp/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
basedir=c:/wamp/bin/mysql/mysql5.1.53
log = c:/wamp/logs/mysql_query_log.log        #dump query logs in this file
log-error=c:/wamp/logs/mysql.log
datadir=c:/wamp/bin/mysql/mysql5.1.53/data
...
...
...
...

for mysql > = 5.5仅用于慢查询(1秒或更长时间) my.cfg < / em >

[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes
MySQL 5.6版本有bug。 甚至mysqld显示为:

    Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf

实际设置按以下顺序读取:

    Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf

检查文件:C:\ProgramData\MySQL\MySQL Server 5.6\my.ini

希望它能帮助到一些人。

开启MAC Machine查询日志功能。

打开以下文件:

vi /private/etc/my.cnf

设置'mysqld'节下的查询日志url,如下所示:

[mysqld]


general_log_file=/Users/kumanan/Documents/mysql_query.log

很少有机器不能正确地记录查询,所以你可以从MySQL控制台启用它

mysql> SET global general_log = 1;

这已经在一个评论中了,但它有自己的答案: 不编辑配置文件:在mysql中,作为root,执行

SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;

之后别忘了关掉:

SET global general_log = off;

这不是问题的确切答案,因为这个问题已经有了很好的答案。这是附带信息。启用general_log确实降低了MySQL的性能。我不小心在生产服务器上留下了general_log =1,并花了几个小时来找出为什么性能不能与其他服务器上的类似设置相比。然后我发现这解释了启用常规日志的影响。http://www.fromdual.com/general_query_log_vs_mysql_performance

故事的要点是,不要把general_log=1放在.cnf文件中。相反,在短时间内使用set global general_log =1只是为了记录足够多的日志来找到你想要找到的东西,然后关闭它。

我不得不在某一时刻放弃并重新创建一般日志。在重建过程中,字符集被弄乱了,我最终在日志中出现了以下错误:

[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'

因此,如果“检查以确保日志记录开启”的标准答案对您不起作用,请检查以确保字段具有正确的字符集。

我还想让MySQL日志文件看到查询,我已经解决了这个问题与下面的说明

  1. /etc/mysql/mysql.conf.d
  2. 打开mysqld.cnf . conf文件

并启用下面的行

general_log_file        = /var/log/mysql/mysql.log
general_log             = 1
  1. 使用/etc/init.d/mysql restart命令重新启动MySQL
  2. /var/log/mysql/检查日志
// To see global variable is enabled or not and location of query log
SHOW VARIABLES like 'general%';
// Set query log on
SET GLOBAL general_log = ON;

我的操作系统Win10MySQL服务器版本- 5.7

my.ini的路径

C:\ProgramData\MySQL\MySQL Server 5.7\my.ini

只需添加到my.ini文件中

general_log_file        = C:/ProgramData/MySQL/MySQL Server 5.7/mysql.log
general_log             = 1