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