1

重複の可能性:
MySQL サーバーがなくなった - ちょうど 60 秒で

PHP で mysql_connect メソッドを使用して、デーモンのデータベース ハンドルを作成しています。問題は、接続が 8 時間以上 (場合によっては数週間以上) 使用されない可能性があることです。

wait_timeout に達したために MySQL がセッションを終了するという問題が発生しています。 http://dev.mysql.com/doc/refman/5.0/en/gone-away.html

すべての接続に対してこの値を増やしたくありません。PHP のみでそのハンドルのタイムアウトを増やす方法はありますか? MySQL経由?

4

2 に答える 2

1

DB は一度に一定数の接続しか提供しないため、長期間 DB 接続に固執するのは良くありません。長い間使用している場合、その接続で実際に何もしていなくても、DB が他の要求を処理する能力が少ないことを意味します。

当分の間、プログラムの使用が終了した場合は接続を切断し、DB の作業をさらに行うときが来たら再接続することをお勧めします。

さらに、このソリューションは、データベースのダウンタイムの可能性からプログラムを保護します。つまり、DB サーバーを再起動する必要がある場合です (これは、サポートされている最適なネットワークでも発生します)。接続を維持している場合(つまり、他の回答によるとDB ping)、そのようなイベントにより、現在とまったく同じ問題が発生します。必要のないときにドロップされる適切に管理された接続を使用すると、DB のダウンタイムを計画している場合でも、安全にデーモンを実行したままにすることができます。その間アイドル状態のままである限り、賢明である必要はありません。

(余談ですが、継続的に実行される PHP プログラムを作成することの賢明さも疑問に思います。PHP は、Web が要求する短期間用に設計されています。長期のデーモン プログラムを実行できる可能性がありますが、その仕事のためのより良いツールがあります)

于 2013-01-17T14:41:35.457 に答える
0

この問題の最善の方法は、mysql_ping(); を使用することです。

手動の PHP mysql_ping()で確認してください

于 2013-01-17T14:34:11.967 に答える