MySQL如何开启记录从客户端收到的每条SQL查询语句和提交时间的功能? 我可以在phpmyadmin或NaviCat中这样做吗? 如何分析日志?
当前回答
当我想快速优化不同的页面加载时,我使用这种方法进行日志记录。 这是一个小建议…
记录到表
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秒内执行的查询。
其他回答
在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
...
...
...
...
在phpMyAdmin 4.0,你去状态>监视器。在那里,您可以启用慢查询日志和常规日志,查看实时监视器,选择图表的一部分,查看相关查询并分析它们。
这已经在一个评论中,但值得自己的回答: 无需编辑配置文件:在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;
还要注意,还有其他选项可以只记录慢速查询或不使用索引的查询。
可以禁用或启用常规查询日志(记录所有查询)
SET GLOBAL general_log = 1 # (or 0 to disable)
推荐文章
- MySQL对重复键更新在一个查询中插入多行
- mysql_connect():[2002]没有这样的文件或目录(试图通过unix:///tmp/mysql.sock连接)在
- MySQL:如何复制行,但改变几个字段?
- 不能删除或更新父行:外键约束失败
- 为什么logcat没有显示任何东西在我的Android?
- Mysql错误1452:不能添加或更新子行:外键约束失败
- MySQL DISTINCT在GROUP_CONCAT()上
- 第一次设计数据库:我是否过度设计了?
- 在Python中记录未捕获的异常
- MySQL选择一个列DISTINCT,与其他列相对应
- 重定向复制的标准输出到日志文件从bash脚本本身
- 错误1022 -不能写;表中重复的键
- 如何修改列和更改默认值?
- 如何在MySQL 8.0中授予root用户所有权限
- mysqld_safe UNIX套接字文件目录“/var/run/mysqld”不存在