tombo2-progress’s diary

できるだけ毎日1時間を切り取ってここに晒す。誤字脱字気にしない。日本語が崩壊するのも気にしない。最終的にまとめて本ブログに書く

MySQLのpacket その1

環境構築

centos環境にMySQL8.0.12用意した。 ソースからビルドしようとして結果失敗した。 途中で/var/lib/mariadb~~.logに書き込めないとか言われて、完全にクリーンなcentosにsource展開してたから、は??ってなったんだけど、そのとき眠すぎて詳細忘れてしまった。。。

そのままアンインストールを雑にやってrpmから入れた。

packet除く

まずssl通信がデフォなので、オプションつけてssl使わずに通信させる。

  • 5.7 => --skip-ssl
  • 8.0 => --ssl-mode=DISABLED

https://dev.mysql.com/doc/refman/8.0/en/encrypted-connection-options.html#option_general_ssl-mode

f:id:tom__bo:20180729230636p:plain

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プロトコルを解釈してくれるので、あとはこれを見ながらマニュアルを読めば簡単に実験しつつ理解できる。 パケットからいろいろな情報が漏れてしまうので、一部だけど。

f:id:tom__bo:20180729230640p:plain