旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【MySQL】MySQLで大量のデータをリストアしようとしたらエラーになった。

当たり前の話である。

各言語やフレームワークの選定、DBのパフォーマンス調査 なんでもそうだけど、大量のデータをinsertしたりsaveさせたりする時に時間を図ろうと もちろんinsertだけじゃなくてselectやgetするときも。 そんな時に数億件のデータ入れてみたり。

もしくは稼働中のテーブルからデータをdumpしてリストアしようとした時など こんなエラーが出たりする。

Lost connection to MySQL server during query

そんな時はmax_allowed_packetの値を変更してあげればいい。 現在の状況を見たい場合はMySQLにログインしてshowで確認。

mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
1 row in set (0.01 sec)

デフォルト値ですね。 パケット最大サイズが1Mになっていました。

my.cnfに以下のようにして再起動してあげればvalueの値が増えます。

[mysqld]
max_allowed_packet=16MB

数GのものをMySQLに入れることはそうそうないと思うので、16Mにしておけば大抵のものは大丈夫でしょう。