エクスポートした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');