MySQLのpacket その1
環境構築
centos環境にMySQL8.0.12用意した。 ソースからビルドしようとして結果失敗した。 途中で/var/lib/mariadb~~.logに書き込めないとか言われて、完全にクリーンなcentosにsource展開してたから、は??ってなったんだけど、そのとき眠すぎて詳細忘れてしまった。。。
そのままアンインストールを雑にやってrpmから入れた。
packet除く
まずssl通信がデフォなので、オプションつけてssl使わずに通信させる。
https://dev.mysql.com/doc/refman/8.0/en/encrypted-connection-options.html#option_general_ssl-mode
packetについて
https://dev.mysql.com/doc/dev/mysql-server/8.0.11/page_protocol_basic_packets.html
基本はここにもあるように、payload_length(3bytes), sequence_id(1byte), payload(<payload_length>bytes)の3つに分割された情報が流れている。
16Mbを超える場合はpayload_lengthが224 - 1(0xFFFFFF)になってパケットが分割されるらしい。最近見たいのはclientからのクエリなので、まあこれは必要になったらみる。
Wireshark使ってどんな通信が行われたか見ていく。 MySQLプロトコルを解釈してくれるので、あとはこれを見ながらマニュアルを読めば簡単に実験しつつ理解できる。 パケットからいろいろな情報が漏れてしまうので、一部だけど。