Total Pageviews

Monday 16 July 2012

如何抓取访问MySQL数据库的SQL语句?


正规的办法是打开MySQL服务器的log参数,但修改此参数需要重启MySQL服务,成本很高。
绝世秘籍:
使用tcpdump来截取MySQL服务器的通信,然后分析这些数据得到访问的SQL语句。
简单脚本如下:
tcpdump -i bond0 -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.=" $_"; }
}'
其中的 bond0和port参数按照实际情况调整。
经过我实践,可以截取大部分SQL语句,有一定实用价值。
此秘籍来自网络,非原创。
问: 囧。。是不是也可以把binlog打开查binlog?这样更省事吧?
答: NO Binlog只记录 增、删、改操作,select操作是不记录的。 而且,无论是打开log还是binlog,都需要重新启动服务,成本很高.