[MySQL]インポートで「ERROR 2006 (HY000) at line 2: MySQL server has gone away」のエラー

Read More


10万行のinsert文が書かれたSQLをDBに流し込もうとした時出たエラー。

$ mysql --user={root} --password={pass} --default-character-set=utf8 {db_name} < C:/insert.sql
ERROR 2006 (HY000) at line 2: MySQL server has gone away

1行あたりの実行するSQLデータが大きすぎるとこのようにサーバに蹴られる。バイバイ。


ん?でもおかしいな?
以前これより大きいデータを流し込んだこともあるんだけどその時はエラーなんか出なかったんだが


とか考えながらmy.iniを開いてみる。パカ。

ex) path: C:/xampp1.7.1/mysql/bin/my.ini
## q2014/03/25 xirasaya: upd: 
#max_allowed_packet = 1M
max_allowed_packet = 50M


以前に値を変更した形跡がある。
覚えていないけどどうやら2年ほど前に修正して1Mから50Mに値を増やしたみたい。


んー、だとすればパケット的に問題はないと思うんだが。
1つのSQLが50Mを超えるものなんてそうそうないぞ。






…おや








--
さて、結局原因はというと実に簡単なことで、
SQL毎の最後の';'(セミコロン)を忘れていた。

ex) 連続したinsert文
INSERT INTO {table_name} (...) VALUES (...) ← ここのセミコロン
INSERT INTO {table_name} (...) VALUES (...)
INSERT INTO {table_name} (...) VALUES (...) 


つまり10万行のinsert文を1つのSQLとして1度に処理し、大量のパケットデータを扱おうとしていたことになる。
そりゃ50M超えますわ。



うっかり同じ轍を踏まないようにメモしておく。