通过tcpdump抓取mysql语句分析故障

作者:简简单单 2014-08-25

近期在对mysql例行检查时候,发现有台服务器竟然把千兆内网跑慢了。相当异常,但通过show processlist并为发现异常的进程在运行中。
仔细看了后,发现是个sleep,若kill掉后,流量马上就下降了,但它究竟在做什么呢?

通过tcpdump抓取mysql语句分析故障

为了进一步定位出问题来,想到之前用过的脚本tcpdump分析下是什么内容一直在占用带宽。

 代码如下 复制代码
#!/bin/bash
#this script used montor mysql network traffic.echo sql
tcpdump -i eth1 -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|CALL)/i)
    {
        if (defined $q) { print "$q\n"; }
        $q=$_;
    } else {
        $_ =~ s/^[ \t]+//; $q.=" $_";
    }
}'

运行后,找到了令人振奋的信息

通过tcpdump抓取mysql语句分析故障

程序一直在跑这个语句,然后通过相应的find命令,定位到相应的语句,发给研发人员,去判断程序逻辑是存在问题。

相关文章

精彩推荐