原文地址:https://github.com/Qihoo360/mysql-sniffer/blob/master/README_CN.mdmysql
MySQL Sniffer 是一個基於 MySQL 協議的抓包工具,實時抓取 MySQLServer 端或 Client 端請求,並格式化輸出。輸出內容包括訪問時間、訪問用戶、來源 IP、訪問 Database、命令耗時、返回數據行數、執行語句等。有批量抓取多個端口,後臺運行,日誌分割等多種使用方式,操做便捷,輸出友好。c++
同時也適用抓取 Atlas 端的請求,Atlas 是奇虎開源的一款基於MySQL協議的數據中間層項目,項目地址:https://github.com/Qihoo360/Atlasgit
同類型工具還有vc-mysql-sniffer,以及 tshark 的 -e mysql.query 參數來解析 MySQL 協議。github
建議在 centos6.2 及以上編譯安裝,並用 root 運行。redis
安裝依賴sql
yum -y install glib2-devel libpcap-devel libnet-devel cmake yum -y install gcc gcc-c++
軟件安裝centos
git clone https://github.com/Qihoo360/mysql-sniffer cd mysql-sniffer mkdir proj cd proj cmake ../ make cd bin/
輸出格式爲:時間,訪問用戶,來源 IP,訪問 Database,命令耗時,返回數據行數,執行語句。tcp
mysql-sniffer -i eth0 -p 3306 2017-02-23 14:47:45 testuser 10.xx.xx.xx NULL 0ms 1 select @@version_comment limit 1 2017-02-23 14:47:45 testuser 10.xx.xx.xx NULL 0ms 1 select USER() 2017-02-23 14:47:48 testuser 10.xx.xx.xx NULL 0ms 13 show databases 2017-02-23 14:47:51 testuser 10.xx.xx.xx NULL 0ms 1 SELECT DATABASE() 2017-02-23 14:47:51 testuser 10.xx.xx.xx mysql 0ms 0 use mysql 2017-02-23 14:47:53 testuser 10.xx.xx.xx mysql 0ms 29 show tables 2017-02-23 14:47:54 testuser 10.xx.xx.xx mysql 0ms 1 select 1 2017-02-23 14:48:01 testuser1 10.xx.xx.xx NULL 0ms 0 set autocommit=1 2017-02-23 14:48:01 testuser1 10.xx.xx.xx NULL 0ms 0 set autocommit=1
-l 指定日誌輸出路徑,日誌文件將以 port.log 命名。工具
mysql-sniffer -i eth0 -p 3306 -l /tmp
-l 指定日誌輸出路徑,-p 指定須要抓取的端口列表逗號分割。日誌文件將以各自 port.log 命名。spa
mysql-sniffer -i eth0 -p 3306,3307,3310 -l /tmp