Skip to content
Watch sql base libpcap
C C++ Other
Find file
Latest commit 75ca739 @hoterran add stmt test
Failed to load latest commit information.
libpcap clear
test add stmt test
Makefile add stat for debug
README.md fix #12 #17 for big sql and idle connection
address.c add aux thread for get_address
address.h clean code
adlist.c fix #7
adlist.h fix #7
file_cache.c clear
file_cache.h clear
hash.c sql len 8192
hash.h add hash_remove_stmt
log.c fix #21 refactoring persistence interface adopt add new method
log.h fix #20 add log cache
mysqlpcap-prepare.png add prepare png
mysqlpcap.c fix #33 handle replicator not in filter
mysqlpcap.h add aux thread for get_address
mysqlpcap.png add user column
packet.c merge mysqlpcap 0.8
packet.h clean code
packet_reorder.c fix #7
protocol.c
protocol.h bug fix #46 big execute packet
stat.c bug fix #46 big execute packet
stat.h stat add flexiable interface
user.c fix #13 implement user
user.h fix #13 implement user
utils.c add stat log
utils.h fix #25 refactoring

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

Something went wrong with that request. Please try again.