🐬
MySQL で max_allowed_packet を超過した場合
MySQL で max_allowed_packet
を超過した場合にどうなるんだっけ…と思って試してみた結果。
サーバーの max_allowed_packet をクエリが超過した場合
MySQL 5.6
サーバー起動
% docker run --name mysql56 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.6 --max-allowed-packet=100000
クライアントは原因がわからないけど切断される
% ruby -e 'puts "set @a="+"1"*1000000' | docker exec -i mysql56 mysql
ERROR 2006 (HY000) at line 1: MySQL server has gone away
サーバー側はログ出力なし
% docker logs mysql56
...
MySQL 5.7
サーバー起動
% docker run --name mysql57 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:5.7 --max-allowed-packet=100000
クライアントは原因がわからないけど切断される
% ruby -e 'puts "set @a="+"1"*1000000' | docker exec -i mysql57 mysql
ERROR 2006 (HY000) at line 1: MySQL server has gone away
サーバー側のログで max_allowed_packet
を超えて接続を切断したことがわかる
% docker logs mysql56
...
2021-09-08T13:19:10.767604Z 2 [Note] Aborted connection 2 to db: 'unconnected' user: 'root' host: 'localhost' (Got a packet bigger than 'max_allowed_packet' bytes)
MySQL 8.0
サーバー起動
% docker run --name mysql80 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql:8.0 --max-allowed-packet=100000
クライアントで max_allowed_packet
を超えたことがわかる
% ruby -e 'puts "set @a="+"1"*1000000' | docker exec -i mysql80 mysql
ERROR 1153 (08S01) at line 1: Got a packet bigger than 'max_allowed_packet' bytes
サーバー側はログ出力なし
% docker logs mysql80
...
クライアントの max_allowed_packet を結果が超過した場合
MySQL 5.6
クライアントがエラー
% ruby -e 'puts "select "+"1"*50000' | docker exec -i mysql56 mysql --max-allowed-packet=10000
ERROR 2020 (HY000) at line 1: Got packet bigger than 'max_allowed_packet' bytes
サーバー側はログ出力なし
% docker logs mysql56
...
MySQL 5.7
クライアントがエラー
% ruby -e 'puts "select "+"1"*50000' | docker exec -i mysql57 mysql --max-allowed-packet=10000
ERROR 2020 (HY000) at line 1: Got packet bigger than 'max_allowed_packet' bytes
サーバー側にもログが出る
% docker logs mysql57
...
2021-09-08T13:49:45.856283Z 4 [Note] Aborted connection 4 to db: 'unconnected' user: 'root' host: 'localhost' (Got an error reading communication packets)
MySQL 8.0
クライアントがエラー
% ruby -e 'puts "select "+"1"*50000' | docker exec -i mysql80 mysql --max-allowed-packet=10000
ERROR 2020 (HY000) at line 1: Got packet bigger than 'max_allowed_packet' bytes
サーバー側はログ出力なし
% docker logs mysql80
...
Discussion