質問

私は Pylons (Python フレームワーク) を使用して単純な Web アプリケーションを提供していますが、時々停止するようで、エラー ログに次のようなメッセージが記録されます。 (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
役に立ちましたか?

解決

私はそれを修正したと思います。単純な設定ミスがあったことが分かりました。私のiniファイルは次のように読みました:

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

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

解決策は、ini の 2 行目を次のように変更するだけです。

sqlalchemy.default.pool_recycle = 1800

他のヒント

MySQL のタイムアウト変数を確認するとよいでしょう。

show variables like '%timeout%';

あなたはおそらく次のことに興味を持っています wait_timeout (可能性は低いですが、可能性はあります: interactive_timeout)。Debian と Ubuntu では、デフォルトは 28800 (MySQL は 8 時間後に接続を強制終了します) ですが、プラットフォームのデフォルトが異なるか、サーバーの管理者が異なる構成をしている可能性があります。

私の知る限りでは、 pool_recycle 実際には接続を維持しません。MySQL が接続を強制終了する前に、接続が自動的に期限切れになります。パイロンについては詳しくありませんが、接続が断続的に発生する場合は、 SELECT 1; オプションです。これにより、基本的にサーバー負荷がなくなり、ネットワーク トラフィックが最小限に抑えられます。最後にもう 1 つ考えてみましょう。パイロンが期限切れと判断した接続をなんとか使用できていますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top