Ubuntuでmysqlsnifferを使ってMySQLクエリを追跡する
本番データベースサーバーを使用していますが、クエリロギングを有効にできません。?
その答えは、MySQLパケットを解析してデコードするために、修正されたネットワークスニファを使用することです。あなたは少しコンパイルをする必要がありますが、それは価値があるでしょう。試しても大丈夫ですが、これは通常ローカル接続では機能しません。.
まず、libpcap-devをインストールする必要があります。これは、アプリケーションがネットワークパケットを盗聴できるようにする開発ライブラリです。.
sudo apt-get 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 grep COM_QUERY
192.168.73.1.2622>サーバー:COM_QUERY:SELECT @@ sql_mode
192.168.73.1.2622> server:COM_QUERY:SET SESSION sql_mode =”
192.168.73.1.2622> server:COM_QUERY:SET NAMES utf8
192.168.73.1.1636>サーバー:COM_QUERY:SELECT @@ SQL_MODE
192.168.73.1.1636> server:COM_QUERY: 'db2842_howto'。 'wp_users'からすべての列を表示
ああ、今、私たちは…MySQLを再起動せずに、あらゆる種類のクエリ情報を入手できます.
コマンドの完全なオプションは次のとおりです。
使用方法:mysqlsniffer [オプション]インタフェース
オプション:
-port Nポート番号NでMySQLをリッスン(デフォルトは3306)
-追加のパケット情報を表示する
-tcp-ctrl TCP制御パケットを表示します(SYN、FIN、RST、ACK)。
-net-hdrsメジャーIPおよびTCPヘッダー値を表示します。
-no-mysql-hdrs MySQLヘッダーを表示しません(パケットIDと長さ)
-状態を表示
-v40 MySQLサーバーはバージョン4.0です
-dumpすべてのパケットを16進数でダンプします。
-これを印刷する
オリジナルのソースコードと詳細情報:
http://hackmysql.com/mysqlsniffer
開発サーバーで実行している場合は、クエリログを有効にするだけのほうが簡単です。.