MySQL如何开启记录从客户端收到的每条SQL查询语句和提交时间的功能? 我可以在phpmyadmin或NaviCat中这样做吗? 如何分析日志?
当前回答
我的操作系统是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
其他回答
// 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;
在phpMyAdmin 4.0,你去状态>监视器。在那里,您可以启用慢查询日志和常规日志,查看实时监视器,选择图表的一部分,查看相关查询并分析它们。
看看另一个相关问题的答案。它展示了如何在不重新启动的情况下启用、禁用和查看活动服务器上的日志。
在mysql中记录所有查询
以下是摘要:
如果你不想或者不能重新启动MySQL服务器,你可以在你正在运行的服务器上这样做:
创建日志表(见答案) 启用数据库的查询日志 (注意,字符串'table'应该按字面意思放置,而不是用任何表名代替。感谢尼古拉斯·皮克林)
SET global general_log = 1;
SET global log_output = 'table';
查看日志
select * from mysql.general_log;
禁用数据库查询日志
SET global general_log = 0;
不禁用地清除查询日志
TRUNCATE mysql.general_log
我还想让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/,检查日志
当我想快速优化不同的页面加载时,我使用这种方法进行日志记录。 这是一个小建议…
记录到表
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秒内执行的查询。