@suzu6

主にWEBと解析の技術について書きます。

広く浅くも続ければ深くなるはず。

MySQL server has gone awayがmax_allowed_packetを変更して解決した

MySQLでリストアをしていた際にERROR 2006 (HY000) at line 566: MySQL server has gone awayとエラーが出た。 結果的にmax_allowed_packetを1MBから4MBへ増やしたことで解決しました。

そのメモ。

環境

  • CentOS 6.6
  • MySQL 5.1

MySQL server has gone away

調べるとこちらの記事に行き当たりました。 このエラーがでる原因を3つ示しています。

  1. サーバータイムアウト
  2. 接続をcloseしている
  3. クエリが大きすぎる or クエリの最大サイズの設定が小さい

この中からクエリサイズが設定よりも大きいためと考え、クエリの最大サイズの設定を変更する。

max_allowed_packet

クエリの最大サイズはmax_allowed_packetの設定です。

確認から設定まではを参考にしました。

まずは現在の設定を確認します。

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

単位はバイトで、設定は1MBでした。 my.confを変更して4MBにします。

/etc/my.conf

max_allowed_packet = 4194304

(MySQLのバージョンが古いためか、max_allowed_packet = 4MBとすると変更できなかった)

サーバを再起動して設定を反映後もう一度確認します。

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

OK!!

補足など

サーバを再起動

CentOS6です

$ sudo service mysql restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL.. SUCCESS!

my.confの場所の確認

$ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf

ERROR 2006 (HY000)について

MySQL 5.6 リファレンスマニュアルより

エラー: 2006 (CR_SERVER_GONE_ERROR) メッセージ: MySQL Server が存在しなくなりました

B.4 クライアントのエラーコードおよびメッセージ

5 文字の SQLSTATE 値 ('42S02')。この値は、ANSI SQL および ODBC から採用されており、より標準化されています。すべての MySQL エラー番号に、対応する SQLSTATE 値があるわけではありません。それらの場合は、'HY000' (一般エラー) が使用されます。

B.3 サーバーのエラーコードおよびメッセージ

うん、そのままですね。参考になる記事が見つかって良かったです。

参考