MySQLのパケットをtcpdumpでキャプチャできない!?

MySQLのパケットをtcpdumpでキャプチャしようとしたら、全くキャプチャできないという事態が発生。

とりあえずMySQLに接続した状態でnetstatを打ってみる。

■netstatの結果
[user@example ~]$ netstat -an | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN


3306ポート(MySQLポート)がLISTENのままになっている?
もし接続が確立しているならESTABLISHEDになるはずなのに。。。

もう一度netstatの結果をよく見てみると「UNIX domain sockets」のところに以下のような表示を発見
[user@example ~]$ netstat -an
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix 3 [ ] STREAM CONNECTED 11288 /var/lib/mysql/mysql.sock


どうやらUNIXドメインソケットにつながっていた模様。

■UNIXドメインソケットとは?
簡単に説明するとローカルマシン上のプロセス間通信で利用するソケットのこと。これはネットワークを介さない通信なのでtcpdumpではパケットを拾うことができない。

■原因と解決策
MySQLに接続する際、ホスト名を指定しないと『localhost』で接続することになる。その場合、UNIXドメインソケットにつなぐことになるのでtcpdumpではパケットを拾えない。

なのでMySQLに接続する際は以下のようにしてホスト名を指定すればOK。
mysql -h [hostname] -u [username]

■netstatの結果
[user@example ~]$ netstat -an | grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:42495 127.0.0.1:3306 ESTABLISHED
tcp 0 0 127.0.0.1:3306 127.0.0.1:42495 ESTABLISHED


これでtcpdumpでMySQLのパケットをキャプチャできるようになります。

以上

参考URL
http://norainu.net/mt/archives/2007/02/localhost_unix.html

この記事へのComments:

管理人のみ通知 :

Trackbacks:


プロフィール

トニヒコ

Author:トニヒコ
趣味は旅行と読書とマンガ。
将来の夢はコスモポリタン!

リンク・フリーです。

My hobby is traveling and reading(include manga).
My dream is to become cosmopolitan!

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
スポンサード リンク
マクロミルへ登録
FC2カウンター
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR