如何启用MySQL查询日志?

时间:2011-06-25 16:41:54

标签: mysql logging

如何启用MySQL函数来记录从客户端收到的每个SQL查询语句以及查询语句提交的时间? 我可以在phpmyadmin或NaviCat中执行此操作吗? 我如何分析日志?

14 个答案:

答案 0 :(得分:273)

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

对于mysql< 5.1.29:

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

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选项。要指定日志文件并启用日志记录,请在[mysqld]部分的my.cnf中使用:

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

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

SET global general_log = 1;

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

答案 1 :(得分:163)

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

Log all queries in mysql


以下是摘要:

如果您不想或无法重启MySQL服务器,可以在正在运行的服务器上继续这样做:

  • 创建日志表(请参阅answer

  • 启用数据库的查询日志记录 (请注意,字符串'table'应按字面意思放置,不能用任何表名替换。感谢Nicholas Pickering

SET global general_log = 1;
SET global log_output = 'table';
  • 查看日志
select * from mysql.general_log;
  • 禁用数据库的查询记录
SET global general_log = 0;

答案 2 :(得分:53)

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

登录到桌子

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秒内执行的查询。

答案 3 :(得分:47)

这已经在评论中,但值得回答: 不编辑配置文件:在mysql中,以root身份执行

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

不要忘记之后关掉它。

答案 4 :(得分:13)

您可以使用

禁用或启用常规查询日志(记录所有查询)
SET GLOBAL general_log = 1 # (or 0 to disable)

答案 5 :(得分:6)

我还想启用MySQL日志文件来查看查询,我已通过以下说明解决了这个问题

  1. 转到/etc/mysql/mysql.conf.d
  2. 打开mysqld.cnf
  3. 并启用以下行

    general_log_file        = /var/log/mysql/mysql.log
    general_log             = 1
    
    1. 使用此命令/etc/init.d/mysql restart
    2. 重启MySQL
    3. 转到/var/log/mysql/并查看日志

答案 6 :(得分:3)

MySQL 5.6版本中存在错误。 甚至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”

希望对某人有所帮助。

答案 7 :(得分:2)

在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
...
...
...
...

答案 8 :(得分:1)

mysql&gt; = 5.5 仅适用于慢查询(1秒及以上) my.cfg

[mysqld]
slow-query-log = 1
slow-query-log-file = /var/log/mysql/mysql-slow.log
long_query_time = 1
log-queries-not-using-indexes

答案 9 :(得分:1)

在MAC机器中启用查询日志:

打开以下文件:

Table 1_txns (txn_id, nationality_id, yrqtr, sales, units)
Table 4_nationality (nationality_id, nationality)

在“mysqld”部分下设置查询日志网址,如下所示:

vi /private/etc/my.cnf

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

[mysqld]

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

答案 10 :(得分:1)

不完全是问题的答案,因为问题已经有了很好的答案。这是一个侧面信息。启用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一段短暂的持续时间,只需记录下来,找出你想要找到的东西,然后将其关闭。

答案 11 :(得分:0)

在phpMyAdmin 4.0中,您转到状态&gt;监控。在那里,您可以启用慢查询日志和常规日志,查看实时监视器,选择图形的一部分,查看相关查询并进行分析。

答案 12 :(得分:0)

我不得不放弃并在一点重新创建常规日志。在娱乐过程中,字符集搞砸了,我最终在日志中出现了这个错误:

[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'

因此,如果&#34;的标准答案检查以确保记录已开启&#34;不适合你,检查以确保你的字段具有正确的字符集。

答案 13 :(得分:0)

// 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;