MySQL如何开启记录从客户端收到的每条SQL查询语句和提交时间的功能? 我可以在phpmyadmin或NaviCat中这样做吗? 如何分析日志?
当前回答
这已经在一个评论中,但值得自己的回答: 无需编辑配置文件:在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> 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,因为我的日志表太大了。
开启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>=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
这已经在一个评论中,但值得自己的回答: 无需编辑配置文件:在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;
我的操作系统是Win10, MySQL服务器版本- 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
推荐文章
- 警告用户/local/mysql/data目录不属于mysql用户
- 添加一个复合主键
- 如何在SQL Server Management Studio中查看查询历史
- 无法添加或更新子行:外键约束失败
- 如何从本地机器mysqldump远程数据库
- 如何正确地创建复合主键- MYSQL
- Python中带有回溯的日志异常
- 仅在Datetime列上按日期分组
- 在MySQL数据库中存储货币值的最佳数据类型
- 如何自定义'显示进程列表'在mysql?
- MySQL删除一些外键
- 用MySQL LEFT JOIN删除行
- MySQL - length() vs char_length()
- 使用PDO进行行计数
- 在Mac上安装MySQL后,使用ALTER USER语句重置MySQL root密码