如何捕获在MySQL服务器上运行的查询?

我们正在尝试进行一些服务器性能debugging,我想在几分钟内捕获正在我们的mysql服务器上运行的查询的快照。

我熟悉mysql的SHOW FULL PROCESSLIST ,不过我希望能够通过命令行来运行它,这样我就可以把它转储到一个文件中,然后进行处理。

有没有办法将这个查询输出到一个文件,并让它每秒运行?

有没有更好的方法来捕获所有正在运行的查询?

请注意,我对慢速查询不感兴趣(我熟悉慢速查询日志)。

我会使用慢速查询日志。 它捕获所有的查询,而不仅仅是那些很慢的,如果你设置long_query_time = 0。

它还捕获所有的查询,这不是在这里提到的TCP嗅探技术; 那些不会捕获通过套接字执行的查询。 同时观看SHOW PROCESSLIST; 您将错过快速运行的查询。

如果你想通过stream程列表或TCPstream量捕获查询,我会build议使用Percona Toolkit的pt-query-digest。 它可以为你查询进程列表(并且对结果有意义,如果你自己捕获一堆样本,这是很难做到的),它可以解释MySQL的TCP协议,所以你可以抓取一些TCP交通和分析。 当然,这也是有史以来最好的查询聚合器/分析器/记者,但是在捕获这些查询之后,你没有说明你想要做什么。

最可靠的方法是使用“通用查询日志”,它将捕获所有的查询: http : //dev.mysql.com/doc/refman/5.1/en/query-log.html

您不指定MySQL服务器版本,但是如果您有5.1.12或更高版本,则可以通过SQL启用和禁用全局variables; 详细信息请参阅文档。

当然:

 mysqladmin -u root -p -i 1 --verbose processlist > /tmp/pl.out 

干杯

以root身份尝试此命令(或使用sudo ):

 tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e ' while(<>) { chomp; next if /^[^ ]+[ ]*$/; if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) { if (defined $q) { print "$q\n"; } $q=$_; } else { $_ =~ s/^[ \t]+//; $q.=" $_"; } }' 

findhttp://www.mysqlperformanceblog.com/2008/11/07/poor-mans-query-logging/

这可能是Mysql Proxy的一个地方。 它基本上允许你捕获(和操纵)正在发送的查询。 拦截的基本设置非常简单。 然后,只需更改您的客户端configuration指向代理,以便您可以捕获所有的请求。

基于terminal的Wireshark程序tshark可以帮助:

 tshark -T fields -R mysql.query -e mysql.query 

sudo yum install wireshark会给你在亚马逊Linux上的tshark和sudo apt-get install tshark会给你在Ubuntu 14+上的tshark

我使用了锐佩德罗·贝纳迪诺的解决scheme。 工作很好,除了我在第一行更改了一些事情,详细如下…

 tcpdump -i any -s 0 -l -vvv -w - dst port 3306 | strings | perl -e 'while(<>) { chomp; next if /^[^ ]+[ ]*$/; if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER)/i) { if (defined $q) { print "$q\n"; } $q=$_; } else { $_ =~ s/^[ \t]+//; $q.=" $_"; } }' 

使用tcpdump捕获mysql tcp会话,包括查询和回复。 您可以使用maatkit工具分析转储例如:

http://www.maatkit.org/doc/mk-tcp-model.html

http://www.maatkit.org/doc/mk-query-digest.html

我正在search和search,最后我登陆了MONyog ,实时监控在mysql服务器上执行的所有查询。唯一需要注意的是“Performance_schema”和“statements_digest”表被启用,而Performance_schema可用于MySQL 5.6.14及以上版本。