MySQL でインポート時にMySQL server has gone awayが発生する
WordPressのDBを移設するために、DBをファイルダンプし、sqlファイルをコンソールからmysqlコマンドで実行しようとしたらエラーが発生した。
# mysql -u root -p db01 < db01.sql
Enter password:
ERROR 2006 (HY000) at line 79: MySQL server has gone away
環境はCentOS6.7 + MySQL 5.7.11である。SQLファイルのサイズを確認すると72Mとある程度大きい。
# ls -hl
-rwxr--r-- 1 apache users 72M Jul 11 16:32 db01.sql
こういう時はmax_allowed_packetの設定が影響していることが多い。 設定を確認してみると、max\_allowed\_packet=4M
のようだ。
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.01 sec)
とりあえず、/etc/my.cnfにmax_allowed_packetのサイズを
32MBに設定してみた。
[mysqld]
max_allowed_packet=32M
設定を読み込み直すためにMySQLをリスタートする。
# /etc/init.d/mysqld restart
Stopping mysqld: [ OK ]
Starting mysqld: [ OK ]
設定が反映されたかを確認してみる。
mysql> show variables like 'max_allowed_packet';
+--------------------+----------+
| Variable_name | Value |
+--------------------+----------+
| max_allowed_packet | 33554432 |
+--------------------+----------+
1 row in set (0.00 sec)
今度はmysqlコマンドによるSQLファイルの実行が成功した。
SQLファイルは72MBかつmax_allowed_packetは32MBとSQLファイルよりmax_allowed_packetの設定値の方が小さいが成功した。
おそらく、SQLファイル中に記載されたSQL1つのサイズがmax_allowed_packetより小さければ大丈夫なのだろう。 max_allowed_packet=8M で試してみたが、こちらも成功した。
しばらくはmy.cnfにmax_allowed_packet=8M を設定して運用してみようと思う。
[mysqld]
max_allowed_packet=8M