Answers:
首先,请记住,该日志文件在繁忙的服务器上可能会变得非常大。
对于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+中,该log
选项已被弃用。要指定日志文件并启用日志记录,请在my.cnf [mysqld]
部分中使用此文件:
general_log_file = /path/to/query.log
general_log = 1
或者,要从MySQL控制台打开日志记录(还必须以某种方式指定日志文件位置,或找到默认位置):
SET global general_log = 1;
还要注意,还有其他选项可以仅记录慢速查询或不使用索引的记录。
SET global general_log_file='c:/Temp/mysql.log';
SET global general_log = on;
SET global log_output = 'file';
看看这个对另一个相关问题的答案。它显示了如何在不重新启动的情况下启用,禁用和查看活动服务器上的日志。
总结如下:
如果您不希望或无法重新启动MySQL服务器,则可以在正在运行的服务器上进行以下操作:
创建您的日志表(请参阅答案)
在数据库上启用查询日志记录(请注意,字符串“ table”应原样放置,而不用任何表名替代。谢谢Nicholas Pickering)
SET global general_log = 1;
SET global log_output = 'table';
select * from mysql.general_log;
SET global general_log = 0;
当我想快速优化不同的页面加载时,我使用这种方法进行记录。这是一个小提示...
登录到表
SET global general_log = 1;
SET global log_output = 'table';
然后,您可以从我的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"
这样可以轻松查看我可以尝试减少的查询。我使用8秒间隔仅提取最近8秒内执行的查询。
这已经在注释中了,但是应该得到自己的答案:不编辑配置文件:在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;
/tmp/
,则它可能最终会像/tmp/systemd-private-...-mariadb.service-.../tmp/
我还想启用MySQL日志文件以查看查询,并且已按照以下说明解决了该问题
/etc/mysql/mysql.conf.d
并启用以下行
general_log_file = /var/log/mysql/mysql.log
general_log = 1
/etc/init.d/mysql restart
/var/log/mysql/
查看日志// 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;
在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 5.6版本中有错误。甚至mysqld显示为:
Default options are read from the following files in the given order:
C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
Realy设置按以下顺序读取:
Default options are read from the following files in the given order:
C:\ProgramData\MySQL\MySQL Server 5.6\my.ini C:\Windows\my.ini C:\Windows\my.cnf C:\my.ini C:\my.cnf c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.ini c:\Program Files (x86)\MySQL\MySQL Server 5.6\my.cnf
检查文件:“ C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini”
希望对别人有帮助。
对于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
不完全是问题的答案,因为该问题已经有了很好的答案。这是附加信息。启用general_log确实会降低MySQL性能。我general_log =1
不小心离开了生产服务器,花了几个小时找出为什么性能无法与其他服务器上的类似设置相提并论。然后,我发现了这一点,它解释了启用常规日志的影响。http://www.fromdual.com/general_query_log_vs_mysql_performance。
故事的要点,不要把general_log=1
中.cnf
文件。而是使用set global general_log =1
短暂的时间来记录足够的信息,以找出您要查找的内容,然后将其关闭。