web-dev-qa-db-ja.com

PHP MySQLは接続タイムアウトを設定しました

PHP mysql.connect_timeoutを使用)からのMySQL接続設定タイムアウトに関する特定の投稿があります。この設定がPHPからタイムアウトするかどうかを確認しますMySQLへの接続またはデータベースへの特定のクエリに対して有効ですか?

ここでの私のケースは、MySQLに接続しているページが上部にあり、MySQLに対して3〜4つのクエリを次々と実行している場合です。 1番目と2番目のクエリは実行に1〜2秒しかかかりませんでしたが、3番目のクエリは20秒かかりました。ここで、3番目のクエリに20秒以上かかっている場合は、タイムアウトを呼び出します。したがって、ここでの問題は、このタイムアウトをPHP=から設定することは、データベースへの最初の接続に適用されるか、それ以降のすべてのクエリにも適用されます(独立して)。それ以降の場合は、次に、3番目のクエリで20秒後にタイムアウトするように設定するにはどうすればよいですか?

9
kb0000

Connect_timeoutパラメータは、接続時にのみ有効です。 20秒程度でDBサーバーに到達できるかどうかを確認すると便利です。接続すると、指定したタイムアウトは無効になります。

Mysqlの公式マニュアルページにクエリタイムアウトパラメータが見つかりません: http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html なので、これは可能だとは思わない。

6
dAm2K

それを見てください:

set_time_limit(0);   
ini_set('mysql.connect_timeout','0');   
ini_set('max_execution_time', '0');   
4
gsdfghs4f5a74a

sigalarmはあなたの友達です。アラームを設定し、シグナルハンドラーを使用してアラームを検出できます。

http://php.net/manual/en/function.pcntl-alarm.php

3
Sheer

MySQLバージョン5.7.4以降を使用し、適切な「max_statement_time」変数を設定します。タイムアウトに達した場合、クエリは失敗します

参照 http://mysqlserverteam.com/server-side-select-statement-timeouts/

2
Laurent PELE

これは、php構成ファイルにあります。このファイルの場所は、システムによって異なります。 UbuntuとDebianでは、/ etc/php5/Apache2/php.iniにあります。

mysql.connect_timeout = 60 /* the default value is 60 seconds */
2
Kareem

子プロセスをフォークする必要があります。20秒以内に条件が満たされない場合、親プロセスは子プロセスを強制終了します。

または、クエリのようなIO操作の現在のスレッドをブロックしないnode.jsのような言語を使用します。

0
Josh Ribakoff