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


当前回答

你可能会遇到一组十六进制值,像这样(参数列):

mysql> select * from mysql.general_log LIMIT 1\G
*************************** 1. row ***************************
  event_time: 2023-01-27 13:37:20.950778
   user_host: root[root] @ localhost []
   thread_id: 1434
   server_id: 1
command_type: Query
    argument: 0x73656C656374202A2066726F6D207573657273
1 row in set (0.00 sec)

所以为了让它更具可读性,只需使用:

select a.*, convert(a.argument using utf8) from mysql.general_log a;

返回值是这样的:

mysql> select a.*, convert(a.argument using utf8) from mysql.general_log a LIMIT 1\G
*************************** 1. row ***************************
                    event_time: 2023-01-27 13:37:20.950778
                     user_host: root[root] @ localhost []
                     thread_id: 1434
                     server_id: 1
                  command_type: Query
                      argument: 0x73656C656374202A2066726F6D207573657273
convert(a.argument using utf8): select * from users
1 row in set, 1 warning (0.00 sec)

Ps:我在例子中使用了LIMIT 1,因为我的日志表太大了。

其他回答

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

开启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;

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

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

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

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

SET global general_log = 1;

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

对于mysql>=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