MySQL server has gone away エラー

デフォルトの場合、MySQLサーバは8時間後に接続をクローズする。
定期的にmysql_query()の実行に失敗するときは、これが原因の可能性が高い。
詳しい解説はコチラ
対策は、wait_timeout 変数の変更か、タイムアウト時に接続からやり直すかのどちらかかな・・・?
wait_timeoutを変更するときは、

mysql> SET GLOBAL wait_timeout=88400;

とかでOK。
変更されたかどうかは

mysql> SHOW GLOBAL VARIABLES;

でわかる。
ただ、GLOBALを変えてもSESSIONの値は変わらないんだけど、GLOBALで上書きされてるのだろうか・・・。
詳しくはMySQL全機能リファレンスの457p周辺を参照の事。
MySQLサーバが再起動してもwait_timeoutの値を保持するようにするには、my.cnfのmysqldセクションに、
wait_timeoutの設定を追加すればOK。
ただし、mysql_real_connect()にてclient_flagにCLIENT_INTERACTIVEを指定すると、interactive_timeout秒経過したら接続をcloseする。うまくいかないときはこちらも併せて確認するとよい。
http://dev.mysql.com/doc/refman/4.1/ja/mysql-real-connect.html
※追加調査
4.1以降はこっちの方がわかりやすいかも?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です