故事的要点,不要将 general_log=1 放在 .cnf 文件中 . 而是使用 set global general_log =1 一段短暂的持续时间,只需记录下来,找出你想要找到的东西,然后将其关闭 .
1
我不得不放弃并重新创建一般日志 . 在娱乐过程中,字符集搞砸了,我最终在日志中出现了这个错误:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
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”
希望它对某人有所帮助 .
49
当我想快速优化不同的页面加载时,我使用此方法进行日志记录 . 这是一个小小的提示......
Logging to a TABLE
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"
13 回答
这已经在评论中,但值得回答:没有编辑配置文件:在mysql中,以root身份执行
不要忘记事后关掉它 .
不完全是问题的答案,因为这个问题已经有了很好的答案 . 这是一个侧面信息 . 启用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
一段短暂的持续时间,只需记录下来,找出你想要找到的东西,然后将其关闭 .我不得不放弃并重新创建一般日志 . 在娱乐过程中,字符集搞砸了,我最终在日志中出现了这个错误:
[ERROR] Incorrect definition of table mysql.general_log: expected the type of column 'user_host' at position 1 to have character set 'utf8' but found character set 'latin1'
因此,如果“检查以确保日志记录已启用”的标准答案对您不起作用,请检查以确保您的字段具有正确的字符集 .
MySQL 5.6版本中存在错误 . 甚至mysqld显示为:
Realy设置按以下顺序读取:
检查文件:“C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini”
希望它对某人有所帮助 .
当我想快速优化不同的页面加载时,我使用此方法进行日志记录 . 这是一个小小的提示......
Logging to a TABLE
然后,您可以从我的
mysql.general_log
表中进行选择以检索最近的查询 .然后我可以在mysql.log上做类似于
tail -f
的事情,但有更多的改进......这样可以很容易地查看我可以尝试并减少的查询 . 我使用8秒间隔来仅获取在最后8秒内执行的查询 .
看看另一个相关问题的答案 . 它显示了如何在不重新启动的情况下启用,禁用和查看实时服务器上的日志 .
Log all queries in mysql
以下是摘要:
如果您不想或无法重新启动MySQL服务器,可以在运行的服务器上继续这样操作:
创建日志表(参见answer)
启用数据库的查询日志记录(请注意,字符串'table'应按字面意思放置,不能用任何表名替换 . 谢谢Nicholas Pickering)
我还想启用MySQL日志文件来查看查询,我已通过以下说明解决了这个问题
转到
/etc/mysql/mysql.conf.d
打开mysqld.cnf
并启用以下行
使用此命令重新启动MySQL
/etc/init.d/mysql restart
转到
/var/log/mysql/
并检查日志在Windows上,您可以直接访问
在 my.ini 中插入此行
my.ini 文件最终看起来像这样
for mysql>=5.5 仅适用于慢速查询(1秒及以上)my.cfg
您可以使用禁用或启用常规查询日志(记录所有查询)
首先, Remember that this logfile can grow very large on a busy server.
For mysql < 5.1.29:
要启用查询日志,请将其放在
/etc/my.cnf
中[mysqld]
部分另外,从MySQL控制台启用它
见http://dev.mysql.com/doc/refman/5.1/en/query-log.html
For mysql 5.1.29+
对于mysql 5.1.29,不推荐使用
log
选项 . 要指定日志文件并启用日志记录,请在[mysqld]
部分的my.cnf中使用:或者,要从MySQL控制台打开日志记录(还必须以某种方式指定日志文件位置,或找到默认位置):
另请注意,还有其他选项可以仅记录慢速查询或不使用索引的查询 .
要在MAC机器中启用查询日志:
打开以下文件:
在“mysqld”部分下设置查询日志URL,如下所示:
很少有机器没有正确记录查询,所以你可以从MySQL控制台启用它
在phpMyAdmin 4.0中,您将转到状态>监视器 . 在那里,您可以启用慢查询日志和常规日志,查看实时监视器,选择图形的一部分,查看相关查询并分析它们 .