如何启用MySQL函数来记录从客户端收到的每个SQL查询语句以及查询语句提交的时间?我可以在phpmyadmin或NaviCat中执行此操作吗?我如何分析日志?
Gry*_*ius 291
首先,请记住,在繁忙的服务器上,此日志文件可能会变得非常大.
对于mysql <5.1.29:
要启用查询日志,把这个/etc/my.cnf在[mysqld]节
log = /path/to/query.log #works for mysql < 5.1.29
Run Code Online (Sandbox Code Playgroud)
另外,从MySQL控制台启用它
SET general_log = 1;
Run Code Online (Sandbox Code Playgroud)
请参阅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
Run Code Online (Sandbox Code Playgroud)
或者,要从MySQL控制台打开日志记录(还必须以某种方式指定日志文件位置,或找到默认位置):
SET global general_log = 1;
Run Code Online (Sandbox Code Playgroud)
另请注意,还有其他选项可以仅记录慢查询或不使用索引的查询.
Ale*_*des 177
看看另一个相关问题的答案.它显示了如何在不重新启动的情况下启用,禁用和查看活动服务器上的日志.
以下是摘要:
如果您不想或无法重新启动MySQL服务器,可以在运行的服务器上继续这样操作:
创建日志表(参见答案)
启用数据库上的查询日志记录(请注意,字符串'table'应按字面意思放置,而不是由任何表名替换.感谢Nicholas Pickering)
SET global general_log = 1;
SET global log_output = 'table';
Run Code Online (Sandbox Code Playgroud)
select * from mysql.general_log;
Run Code Online (Sandbox Code Playgroud)
SET global general_log = 0;
Run Code Online (Sandbox Code Playgroud)
Lay*_*yke 59
当我想快速优化不同的页面加载时,我使用此方法进行日志记录.这是一个小小的提示......
记录到TABLE
SET global general_log = 1;
SET global log_output = 'table';
Run Code Online (Sandbox Code Playgroud)
然后,您可以从我的mysql.general_log表中进行选择以检索最近的查询.
然后我可以tail -f在mysql.log上做类似的事情,但有更多的改进......
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"
Run Code Online (Sandbox Code Playgroud)
这样可以很容易地查看我可以尝试并减少的查询.我使用8秒间隔来仅获取在最后8秒内执行的查询.
com*_*ike 50
这已经在评论中,但值得回答:没有编辑配置文件:在mysql中,以root身份执行
SET global general_log_file='/tmp/mysql.log';
SET global log_output = 'file';
SET global general_log = on;
Run Code Online (Sandbox Code Playgroud)
不要忘记事后关掉它.
Jon*_*Jon 14
您可以使用禁用或启用常规查询日志(记录所有查询)
SET GLOBAL general_log = 1 # (or 0 to disable)
Run Code Online (Sandbox Code Playgroud)
小智 9
我还想启用MySQL日志文件来查看查询,我已通过以下说明解决了这个问题
/etc/mysql/mysql.conf.d并启用以下行
general_log_file = /var/log/mysql/mysql.log
general_log = 1
Run Code Online (Sandbox Code Playgroud)
/etc/init.d/mysql restart/var/log/mysql/检查日志小智 5
// 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;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
362644 次 |
| 最近记录: |