引き続きpacketについて
昨日見つけたmysql-snifferかProxySQLあたりでパケットをどう解析しているか見れば良さそう。
golangでも実装している人がいる。
https://github.com/zorkian/mysql-sniffer
ココらへん見るとcom-queryとしてクエリが取れてて、connection phaseとcommand phaseを区別している。
書いてて思ったのだが、connection phaseとcommand phaseを区別できるかといっているのは5byte目のcommand phaseの31種類のクエリタイプの部分でこの2phaseが判断できるかということで、完全にパケットをパースすればわかるのは当然のこと。
パースしてから不正なパケットかクエリ化判断するのは避けたいので、5byte目が03で、それ以降を文字列として読んでselect, update, ...が出てくるかで簡単に判断したい。stmt関連もそんな感じでルール書いてしまえば行けるだろうか?
パケット見ているとcom_delayed_insertとかもあってなんじゃこれってのがいくつかある
https://dev.mysql.com/doc/internals/en/command-phase.html
結局protocolはいくつかあれどpacketとして流れるのは2phaseのパケットとresponse packetだけだと思う。 もしかして44種類のパケットパースすれば全部?
.