Ubuntu上でmysqlsnifferを使ってMySQLクエリを追跡する

Ubuntu上でmysqlsnifferを使ってMySQLクエリを追跡する - の仕方 2023
Ubuntu上でmysqlsnifferを使ってMySQLクエリを追跡する - の仕方 2023
Anonim

本番用のデータベースサーバーがあり、クエリログを有効にすることはできません…データベースに対して実行されているクエリはどのように見えますか?

答え:変更されたネットワークスニファを使用して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_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 > server: COM_QUERY: SELECT @@SQL_MODE 192.168.73.1.1636 > server: COM_QUERY: SHOW FULL COLUMNS FROM `db2842_howto`.`wp_users`

ああ、今そこには… MySQLを再起動する必要なく、あらゆる種類のクエリ情報があります。

コマンドの完全なオプションは次のとおりです。

使用法:mysqlsniffer [オプション]インタフェース

オプション: -port Nポート番号NでMySQLを聞きます(デフォルト3306)。 -verbose余分なパケット情報を表示する -tcp-ctrl TCP制御パケットを表示します(SYN、FIN、RST、ACK) -net-hdrs主要なIPとTCPヘッダーの値を表示する -no-mysql-hdrs MySQLヘッダ(パケットIDと長さ)を表示しません。 状態を表示する -v40 MySQLサーバはバージョン4.0です。 -dumpすべてのパケットを16進数でダンプします。 -helpこれを印刷する

元のソースコードと詳細情報: http://hackmysql.com/mysqlsniffer

開発サーバー上で実行している場合は、単にクエリのログを有効にする方が簡単です。

人気のあるトピック

専門家の助言