ERROR 2006 : MySQL server has gone away の対処法 (ロリポップ!などレンタルサーバーの場合)

WordPressの自作プラグインを動かしていた所、どうもMysqlクエリがうまく実行されないことが多い。

念の為、生成されているSQL文をコピーしてphpMyAdminで実行してみるとちゃんと動作するので、SQL文のエラーではない。

mysql_error()でエラー確認

PHPプログラムでMySQLエラーが出る時は、エラーを調べる関数mysql_error()を使う。

$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
mysql_select_db(DB_NAME);
echo mysql_errno($link) . ": " . mysql_error($link). "\n";

動かしてみると、

ERROR 2006 : MySQL server has gone away

と表示された。「MySQLサーバーは行ってしまった…」

どこへ!?

MySQL server has gone away

このエラーは、多くの場合はタイムアウトを意味する。ただし

エラーの最も一般的な原因は、サーバがタイムアウトして接続がクローズしたことです。デフォルトでは、何も起きない状態が 8 時間続くと、サーバは接続をクローズします。

とのことなので、今回は違う。せいぜい20秒くらいしかかかっていない。

もう一つの原因は、大きすぎるクエリを送信しようとしたこと。試しにクエリを短くして実行してみたところ問題がなかったので、こちらの原因と断定。

広告

大きすぎるクエリの場合の解決方法

my.cnfの max_allowed_packet のサイズを
max_allowed_packet = 8M
などちょっと大きめにしてあげれば解決する。

レンタルサーバーの場合の解決方法

しかし、今回はロリポップ!というレンタルサーバーなのであった。レンタルサーバーでは、まずmy.cnfの設定が変更できない。せいぜいphp.iniの設定までしか許されていない。

細かくプロセスを見ていくと、重めのループ処理をしているところでMySQLのコネクトが切れていることがわかった。
foreachの中でmysql_ping()を実行すると…
PHP: mysql_ping – Manual

解決しました。

About: dacelo


1 thought on “ERROR 2006 : MySQL server has gone away の対処法 (ロリポップ!などレンタルサーバーの場合)”

  1. This design is wicked! You obviously know how to keep
    a reader entertained. Between your wit and your videos, I was almost moved to start my own blog (well, almost…HaHa!) Excellent job.
    I really enjoyed what you had to say, and more than that,
    how you presented it. Too cool!

Leave a Reply

Your email address will not be published. Required fields are marked *