tcpdumpでMySQLサーバに流れてくるクエリをみる

社内のMySQLマスターのtcpdumpの様子。マスタ切り替えした後に切り替え先でクエリが流れているかをみる。単に3306ポートのパケットを流すだけでもよいが、接続確立に失敗しているがパケットは流れてくるという状況もあるので、SQL文が流れているかまでみるのがよい。

tcpdump -tttt -l -i eth0 -A -n -s 0 dst port 3306 | grep -iE "select|update|delete|insert"
  • -tttt は人間に読みやすい形式のタイムスタンプを付与する
  • -l は line buffered。パケット数の大きい環境で負荷を軽くする
  • -Aアスキー表示
  • -nIPアドレスの逆引きをしない。DNSゾルバに負荷をかけないため
  • -s 0 は出力をtruncateせずに全部だす
  • -iはネットワークインタフェースを指定。複数のインタフェースがついていることもあるので、ip aで確認しておこう
  • dst port 3306 宛先ポート番号が3306

tcpdumpのオプション、わかりきっているようで、そういえば line bufferedしてなかったとか、tの数何個だっけとかちょっとした気付きがある。

追記

Prepared Statementになっていると文字列では引っかからないとのこと。