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,因为我的日志表太大了。
其他回答
可以禁用或启用常规查询日志(记录所有查询)
SET GLOBAL general_log = 1 # (or 0 to disable)
我还想让MySQL日志文件看到查询,我已经解决了这个问题与下面的说明
进入/etc/mysql/mysql.conf.d 打开mysqld.cnf . conf文件
并启用下面的行
general_log_file = /var/log/mysql/mysql.log
general_log = 1
使用/etc/init.重启MySQLd / mysql重启 进入/var/log/mysql/,检查日志
在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
...
...
...
...
这已经在一个评论中,但值得自己的回答: 无需编辑配置文件:在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;
// 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;