如何解析最近24小时条目的MySQL慢查询日志

时间:2014-11-13 23:26:24

标签: mysql linux awk sed grep

我想处理我的MySQL慢查询日志并检索最近24小时的条目,日志轮换目前不是一个选项。

以下是一个示例日志条目

# Query_time: 0.000431  Lock_time: 0.000124 Rows_sent: 8  Rows_examined: 25
SET timestamp=1415792064;
SELECT `username`, `password`, `date_created` From joomla_users
ORDER BY `kid` DESC;
# User@Host: joomla[joomla] @  [192.168.168.100]

我想使用awk或grep或类似的解决方案,可以通过命令行执行或作为脚本的一部分,通过比较&#来识别过去24小时内放置在mysql慢查询日志文件中的条目34; SET TIMESTAMP"每个条目的行,并将所述条目放入单独的日志文件中。

1 个答案:

答案 0 :(得分:0)

我非常强烈建议使用Percona Toolkit的查询摘要工具进行此类分析。它很容易安装,基本上完全按照你想要分析慢查询的方式进行(基于查询足迹分析它们,而不是查询中的各个参数,排除基于REGEX表达式的某些类型的查询等)

查看Percona工具包(http://www.percona.com/doc/percona-toolkit/2.1/pt-query-digest.html)。如果您决定使用它,以下代码应该易于适应

pt-query-digest --since '2014-11-01' --filter '$event->{arg} =~ m/^select/i' /var/log/mysql/mysql-slow-query.log > /tmp/pt_slow_nov

这就是说从2014-11-01开始分析查询,只查看选择查询,从/var/log/mysql/slow-query.log读取慢查询日志(显然你需要引用你的文件位置)并将分析输出到/ tmp / pt_slow_nov。如果您熟悉grep和awk,那么参数化此查询的--since部分并将其粘贴到cron中应该非常简单。