Skip to main content

在Ubuntu上使用mysqlsniffer跟踪MySQL查詢

在Ubuntu上使用mysqlsniffer跟踪MySQL查詢

Geoffrey Carr

您有一個生產數據庫服務器,並且您無法啟用查詢日誌記錄...那麼您如何看待針對數據庫執行的查詢?

答案:使用修改後的網絡嗅探器解析MySQL數據包並對其進行解碼。你必須做一點編譯,但這是值得的。請注意,這通常不適用於本地連接,但歡迎您嘗試。

首先,您需要安裝libpcap-dev,它是允許應用程序嗅探網絡數據包的開發庫。

sudo apt-get install libpcap-dev

現在讓我們創建一個目錄,下載源代碼並進行編譯

mkdir mysqlsniffer

cd mysqlsniffer

wget hackmysql.com/code/mysqlsniffer.tgz

tar xvfz mysqlsniffer.tgz

gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c

此時,我們在源目錄中有一個名為mysqlsniffer的閃亮新可執行文件。您可以將它複製到任何您喜歡的地方(路徑中的某個地方會很有用)

要運行mysqlsniffer,您需要指定MySQL正在偵聽的網絡接口。對我來說,這是eth0。

sudo /path/to/mysqlsniffer eth0

大量的東西開始飛過...讓我們過濾掉它,這樣我們就可以得到查詢而不是所有多餘的數據。

$ sudo /path/to/mysqlsniffer –no-mysql-hdrs eth0 | grep COM_QUERY

192.168.73.1.2622 > server: COM_QUERY: SELECT @@sql_mode192.168.73.1.2622 > server: COM_QUERY: SET SESSION sql_mode=”192.168.73.1.2622 > server: COM_QUERY: SET NAMES utf8192.168.73.1.1636 > server: COM_QUERY: SELECT @@SQL_MODE192.168.73.1.1636 > server: COM_QUERY: SHOW FULL COLUMNS FROM `db2842_howto`.`wp_users`

啊,現在我們有...各種查詢信息,無需重啟MySQL。

以下是該命令的完整選項:

用法:mysqlsniffer [OPTIONS] INTERFACE

選項:-port N在端口號N上偵聽MySQL(默認為3306)-verbose顯示額外的數據包信息-tcp-ctrl顯示TCP控制包(SYN,FIN,RST,ACK)-net-hdrs顯示主要的IP和TCP標頭值-no-mysql-hdrs不顯示MySQL頭(包ID和長度)-state顯示狀態-v40 MySQL服務器是4.0版-dump以十六進制轉儲所有數據包-help打印此

原始源代碼和更多信息:http://hackmysql.com/mysqlsniffer

如果您在開發服務器上運行,那麼打開查詢日誌記錄會更容易。

Link
Plus
Send
Send
Pin