もう少し詳しく申し上げると、PHPなWebアプリからMySQLにその都度接続している所、時々そのエラーが起こりクエリを発行する事が出来なくなります。
どうすればこういった事が起こらずに安定して接続できるようになるのでしょうか?
マニュアルによると以下の可能性が記載されていましたが、どれにも該当しません。
・クエリが長すぎる可能性がある…3行ほどの短いクエリでも発生します。
・wait_timeoutを超えてしまっている…設定としては90秒ですが、数秒で起きるときは発生します。
また、統計を見る限り同時最大接続数がmy.cnfで設定した数を叩いているという訳でもないようです。
もし解決法をご存じの方いらっしゃいましたら教えて頂けますでしょうか。
よろしくお願いいたします。
まずはお願いなのですが、
お使いのパソコンのOSやPHPのバージョンなど、
何も判らないと原因の特定は難しくなりますので、必須だとご記憶ください。
不適当な回答が集まっても混乱をきたしますから、私への返信欄か、
あるいは、コメント欄に書き加えておくことを勧めます。
それから、PHPのエラーログは確認されましたか?
MySQLが逃げ出した時のSQLを照らし合わせていくと同じようなパターンに遭遇するとは思うが面倒だ。
一通りの条件テストはしたみたいだから、それでもダメなら単純な推敲になるがindexかtableがぶっ壊れてそうな気がする。
reindexでもいいかもしれないがバックアップ取ってからrepairするのが近道だろ思う。
1年以上追っていますが、なぜかパターン性がありません。そして、壊れていると言うことはありません。
というのもindex等が壊れた場合にはmysqld.logに記述されるほか、その後の読み出しが出来なくなるためです。
なお、別地域のデータセンタにある別サービスのサーバにおいても、「MySQL server has gone away」が時折発生しています。
何か参照しておいた方が良い情報はありますでしょうか?
もし何かお気づきの点がございましたら教えて頂けると幸いです。
disconnectしていないというオチではないよね?
とりあえず、REPAIR TABLE コマンドを発行して様子を見てみ
> disconnect
どのタイミングででしょうか?
スクリプト終了時には自動的に発行されると思っていますので、行っておりません。
> REPAIR TABLE
パターン性がないのですが、過去に起こったことのあるテーブルで実行してみたいと思います。
英語ですが、下記のページがまとまっていると思います。
http://blog.taragana.com/index.php/archive/mysql-tip-mysql-serve...
ざっくり概要を訳してみると(間違っていたらゴメンナサイ...)
稀なケースとして、
というのが挙げられています。
関係ありそうなもの、無さそうなもの、玉石混交ですが、参考まで。
# なんとなく、PHP のコネクションプーリングの問題のような気がするけど。
大変失礼しました。CentOS 5.3や5.4です。
PHPは5.2.6や5.2.13などを利用し、MDB2やPDO等で接続しています。
なお、いずれの環境においても、OSを再インストールしてもマシン(ラックマウントサーバ)を変えてもごくまれに発生する状況です。
PHPのエラーログにはMDB2_Errorという記述がございました。この中身が、「MySQL server has gone away」となっています。