koron / dbquerylog

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

can't work with MySQL 8.x

koron opened this issue · comments

DockerでMySQLを動かし、WSL2からtcpdumpしつつアクセスをしてみた。

mysql-client 8.0 が作るハンドシェイク応答パケットが全然解釈できない。
サーバーが5.7でも8.0でも同様(当然)。なんか根本的に形が違うっぽい。
Usernameに終端 \0 がない。

cmd/test-conn が作るパケットならば、サーバーがMySQL 8.0.35でも5.7.44でも問題なく解釈できた。

ハンドシェイクのcflagsの変更に対応できてない可能性がある。

調査結果

  • Go製のテストプログラムとMySQL 8.0の通信は dbquerylog でログが取れた
  • Go製のテストプログラムとMySQL 5.7の通信は dbquerylog でログが取れた
  • MySQL 8.0の cli クライアントとの通信は dbquerylog でログが取れなかった
    • クライアント側のハンドシェークパケットの Charset の解釈が間違ってた。誤:variable int 正:uint8
    • クライアントはHandshakeではなく SSLRequest を送ってた
    • --ssl-mode disable を付ければ dbquerylog でログが取れるようになった 参考情報

今後の課題

  • パケットダンプで全部見れている以上、がんばればSSL対応もできる。やるか?

  • JDBCドライバの更新に伴うものの可能性がある。要状況確認

  • 状況再現用に発生する際のパケットキャプチャが欲しい

    こんな感じで capture.pcap ファイルにデータが取れるはず。

    $ sudo tcpdump -s 0 -l -w capture.pcap "tcp port 3306"