How to show the last queries executed on MySQL?
是否有任何查询/方法显示在所有服务器上执行的最后一个查询?
对于那些拥有mysql>=5.1.12的用户,可以在运行时全局控制此选项:
如果希望输出到文件而不是表:
我更喜欢这种方法来编辑.cnf文件,因为:
有关详细信息,请参阅mysql 5.1参考手册-服务器系统变量-常规日志
您可以为这类诊断启用常规查询日志。一般来说,您不会在生产服务器上记录所有的选择查询,但这是一个性能杀手。
编辑您的mysql配置,例如/etc/mysql/my.cnf-查找或添加这样的行
重新启动MySQL以获取更改,现在可以
嘿,普雷斯托,你可以在他们进来的时候观察他们。
您可以执行流式操作来监视MySQL查询日志。
打开mysql配置文件my.cnf
1 | sudo nano /etc/mysql/my.cnf |
在
重新启动MySQL服务器以反映更改
1 | sudo service mysql start |
在终端中使用以下命令监视mysql服务器日志
1)如果启用了一般的MySQL日志记录,那么我们可以根据配置中提到的内容检查日志文件或表中的查询。使用以下命令检查启用的内容
如果我们需要表中的查询历史,那么
查看mysql.general_log表
如果希望输出到文件:
1 2 3 |
2)我们还可以检查.mysql_历史文件中的查询。cat~/.mysql_历史
如果启用了mysql binlog,可以通过执行来检查用户运行的命令在Linux控制台中通过浏览mysql binlog目录执行命令
1 | mysqlbinlog binlog.000001 > /tmp/statements.sql |
有可能
或者常规日志会影响MySQL的性能
也许您可以通过查看查询日志来发现这一点。
在阅读了保罗的答案之后,我继续在https://dev.mysql.com/doc/refman/5.7/en/query-log.html上寻找更多信息。
我找到了一个非常有用的代码。这里是上下文的摘要。
(注:以下代码不是我的)
这个脚本是一个保持表干净的示例,它将帮助您减少表的大小。一天后,将有大约180k个日志查询。(在一个文件中,每天30 MB)
您需要添加一个额外的列(event_unix),然后您可以使用此脚本来保持日志的整洁…它将把时间戳更新为unix时间戳,删除超过1天的日志,然后从event-unix将事件时间更新为时间戳…听起来有点困惑,但效果很好。
新列的命令:
1 2 3 4 5 6 |
清除脚本:
1 2 3 4 5 6 7 | SET GLOBAL general_log = 'OFF'; RENAME TABLE general_log TO general_log_temp; UPDATE general_log_temp SET event_unix = UNIX_TIMESTAMP(event_time); DELETE FROM `general_log_temp` WHERE `event_unix` < UNIX_TIMESTAMP(NOW()) - 86400; UPDATE general_log_temp SET event_time = FROM_UNIXTIME(event_unix); RENAME TABLE general_log_temp TO general_log; SET GLOBAL general_log = 'ON'; |
荣誉归于塞巴斯蒂安·凯撒(代码的原始作者)。
希望有人能像我一样发现它的用处。
如果您不想更改MySQL配置,可以使用SQL事件探查器,如"neor profile sql"http://www.profile sql.com。
在Linux中可以看到以下内容
1 2 3 | cd /root ls -al |