インポート時にserver has gone awayが発生した時の対応メモ(MySQL)


エクスポートしたSQLファイルをインポートしようとすると、「MySQL server has gone away」なるエラーが発生。

$ mysql -utest test_db < ./test.sql
ERROR 2006 (HY000) at line 2: MySQL server has gone away

調査

調べてみると、インポートしようとしたファイルサイズが、max_allowed_packetの設定を超えているとのこと。
my.cnfは見れない環境なので、mysqlにログインしてコマンドでサイズを確認。

mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name      | Value   |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+

4MB…たしかに、ファイルサイズは9MBある。
コマンドで変えてみる。

mysql> set global max_allowed_packet = 10484736;
ERROR 1227 (42000): Access denied; you need (at least one of) the SUPER privilege(s) for this operation

残念ながら権限が無くて変更できない…

対応内容

サイズの指定が「ファイル単位」なのかと思ったが、どうやら実行されるSQL単位らしい。
エラーになったデータは、全INSERTを1つのバルクインサートで行おうとしていた。

-- イメージ
INSERT INTO `test` VALUES
(1, 'test1'),
(2, 'test2'),
:
(省略)
:
(999, 'test999'),
(1000, 'test1000'); 

これを、細かい単位に区切ることで解決。

-- イメージ
INSERT INTO `test` VALUES
(1, 'test1'),
(2, 'test2');
:
(省略)
:
INSERT INTO `test` VALUES
(999, 'test999'),
(1000, 'test1000'); 
  • このエントリーをはてなブックマークに追加