【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にしておけば大抵のものは大丈夫でしょう。