質問

私はWSGIの下でDjangoでMySQLを去りました。 StackoverFlowでこの問題のエントリを見つけましたが、Djangoでは特に何もありませんでした。 Googleは、回避策を除いて役に立ちません(たまにウェブサイトを投票すること、またはデータベースのタイムアウトを増やすなど)。決定的なものはありません。技術的には、djangoおよび/またはmysqldb(最新の1.2.3c1を使用しています)は、サーバーが接続を吊るした場合に再接続を試みる必要がありますが、これは起こりません。回避策なしでこの問題を解決するにはどうすればよいですか?

役に立ちましたか?

解決

show variables like 'wait_timeout';

これは設定が「mysqlが去った」エラーを投げ返す
それを非常に大きな価値に設定して、それを「消え去った」のを防ぐ
または、特定の期間後にMySQL接続を単純に再ピングします

他のヒント

Django開発者は、このようなすべての質問に対して1つの短い答えを与えました https://code.djangoproject.com/ticket/21597#comment:29

  • に設定されています wontfix

実際、これは#15119の後の意図された動作です。理論的根拠のチケットをご覧ください。

この問題にヒットし、何が起こっているのか理解したくない場合は、このチケットを再開しないでください。

  • 推奨ソリューション:接続を閉じます from django.db import connection; connection.close() あなたのプログラムが長い間アイドル状態になることを知っているとき。

  • Crappy Solution:Wait_timeoutを増やして、プログラムの最大アイドル時間よりも長くなります。

これに関連して、アイドル時間は2つの連続したデータベースクエリ間の時間です。

  • ビューを処理する前に、MySQL接続(タイムアウトした場合に再接続します)にMySQL接続()にミドルウェアを作成できます。

  • また、ミドルウェアを追加して例外をキャッチし、ビューを再接続し、再試行することもできます(上記のソリューションをよりシンプルにすることを好むと思いますが、タイムアウトがまれであると仮定して技術的に機能し、実行する必要があります。効果は望ましいプロパティですが、特にファイルシステムやビューでDBに書き込む場合は、実行するのが難しい場合があります。)

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