WordPressのDBを移設するために、DBをファイルダンプし、sqlファイルをコンソールからmysqlコマンドで実行しようとしたらエラーが発生した。

mysql command
# 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とある程度大きい。

console
# ls -hl -rwxr--r-- 1 apache users 72M Jul 11 16:32 db01.sql

こういう時はmax_allowed_packetの設定が影響していることが多い。
設定を確認してみると、max_allowed_packet=4Mのようだ。

mysql
mysql> show variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 4194304 | +--------------------+---------+ 1 row in set (0.01 sec)

とりあえず、my.cnfにmax_allowed_packetのサイズを32MBに設定してみた。

/etc/my.cnf
[mysqld] max_allowed_packet=32M

設定を読み込み直すためにMySQLをリスタートする。

console
# /etc/init.d/mysqld restart Stopping mysqld: [ OK ] Starting mysqld: [ OK ]

設定が反映されたかを確認してみる。

mysql
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 を設定して運用してみようと思う。

/etc/my.cnf
[mysqld] max_allowed_packet=8M