16

単純なWebアプリケーションを提供するためにPylons(Pythonフレームワーク)を使用していますが、エラーログに次のように表示されるため、時々停止するようです。(2006, 'MySQL server has gone away')

少し調べてみたところ、MySQLへの接続が更新されていなかったことが原因であることがわかりました。ただし、これは問題にはなりません。構成sqlalchemy.pool_recycleファイル内のが自動的に存続するためです。デフォルトはでしたが、この問題のため3600にダイヤルし直しました。1800それは少し役に立ちましたが、ドキュメントによると問題3600 ないはずです。エラーはまだ半定期的に発生します。私はそれをあまり下げたくありません、そしてDOSは私自身のデータベースです:)。

たぶん私のMySQL設定の何かが間抜けですか?正確にどこを見ればよいかわからない。

その他の関連する詳細:

  Python 2.5
  Pylons: 0.9.6.2 (w/ sql_alchemy)
  MySQL: 5.0.51
4

2 に答える 2

8

私はそれを修正したと思います。単純な設定エラーがあったことがわかりました。私のiniファイルの読み取り:

sqlalchemy.default.url = [connection string here]
sqlalchemy.pool_recycle = 1800

問題は、私のenvironment.pyファイルが、エンジンがプレフィックス付きのキーのみをマップすると宣言したことです。sqlalchemy.defaultそのため、pool_recycle無視されました。

解決策は、ini の 2 行目を次のように単純に変更することです。

sqlalchemy.default.pool_recycle = 1800
于 2008-09-05T18:07:50.310 に答える
2

MySQL のタイムアウト変数を確認することをお勧めします。

show variables like '%timeout%';

おそらく興味があるでしょうwait_timeout(可能性は低いですが可能性があります: interactive_timeout)。Debian と Ubuntu では、デフォルトは 28800 (MySQL は 8 時間後に接続を切断します) ですが、プラットフォームのデフォルトが異なるか、サーバーの管理者が別の設定をしている可能性があります。

AFAICTは、pool_recycle実際には接続を維持しません.MySQLがそれらを強制終了する前に、それ自体でそれらを期限切れにします. 私はパイロンに精通していませんが、接続を断続的に行うことSELECT 1;がオプションである場合、基本的にサーバーの負荷がなく、ネットワークトラフィックが最小限になるという犠牲を払って、パイロンを存続させます。最後に 1 つの考え: pylons が有効期限が切れたと認識している接続をどうにかして使用できていますか?

于 2008-08-18T21:35:39.387 に答える