Watch sql base libpcap
C Shell HTML C++ Makefile Yacc Other
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
libpcap
test
Makefile
README.md
address.c
address.h
adlist.c
adlist.h
file_cache.c
file_cache.h
hash.c
hash.h
log.c
log.h
mysqlpcap-prepare.png
mysqlpcap.c
mysqlpcap.h
mysqlpcap.png
packet.c
packet.h
packet_reorder.c
protocol.c
protocol.h
stat.c
stat.h
user.c
user.h
utils.c
utils.h

README.md

mysqlpcap

watch sql base libpcap

我们经常的在 MySQL 里不停的执行show processlist想了解最近执行的 sql 语句状况,可常常拿不到我们想要的结果。

mysqlpcap 是一个基于 pcap 用于观察 sql 语句执行情况的工具。它能够了解到经过某个 MySQL 实例的 sql 语句以及 sql 影响的行数,还有 sql 的响应时间。

新增功能,目前已经支持 prepare statement。

compile

make

use

sudo ./mysqlpcap

use

只抓取某个用户的sql,逗号分割

sudo ./mysqlpcap -u root,user1

过滤某些用户的sql,逗号分割

sudo ./mysqlpcap -n user1,user2

针对某个ip的sql的抓取

sudo ./mysqlpcap -l 1.1.1.1

针对某个port的sql抓取

sudo ./mysqlpcap -p 3001

output format

timestamp           sql                                     latency(us)     rows            
---------           ---                                     -----------     ---             
9:22:33:815114      select 1                                291             1               
9:22:39:167115      select * from d limit 20000             229             -2              
9:22:39:167115      select * from d limit 20000             571             -2              
9:22:39:167115      select * from d limit 20000             707             -2              
9:22:39:167115      select * from d limit 20000             3508            -2              
9:22:39:167115      select * from d limit 20000             3628            -2              
9:22:39:167115      select * from d limit 20000             3675            20000           
9:22:45:227112      desc d                                  47891           3               
9:22:54:678621      insert into d values(1,2,3), (3,4,5)    33719           2    
  1. timestamp MySQL服务器接收到 sql 的时间。

  2. sql

  3. latency(us) 响应时间,MySQL服务器返回结果集的时间与timestamp的差值。由于结果集可能分多个tcp packet发送过来。 所以存在多条记录。

  4. 对于select语句则是结果集的行数,对于其它则是影响的行数。结果集超过一个tcp packet的大小,则行数显示在最后一个tcp packet对应的记录上。 上面的例子,select * from d limit 20000 返回的结果集由 6 个tcp packet组成,所以有 6 行记录,前5行的 rows 为 -2 ,最后一行的 20000 才是真是的返回行数。 latency显示的每个tcp packet 的响应时间。

  5. 第五列是用户

  6. 如果是 prepare statement 则值会显示在 sql 的后面,用方括号包围住。

prepare statement 的支持

use

sql 在前面,方括号里为具体的值。

TODO

  • keyword filter
  • output threading
  • pf_ring
  • multi stmt
  • support shrink hash entry(free session->sql && session->size)

changelog

  • user
  • latency
  • rows
  • sql
  • log
  • prepare
  • multi session big resultset
  • support bond netcard, fix libpcap bug
  • support show src ip (-z)
  • support drop packet and chao order packet
  • ignore remote MySQL port connect me random port, data, for example: replication,
  • ignore me connect rmeote MySQL data
  • support specify detail ip (-l)
  • support bond card repeat packet(same seq)
  • support user level sql capture, now can use parameter -u -n
  • support use signal SIGUSR1 inquire drop percentage
  • support reload machine address
  • support delete idle connection

version

0.01