11

有一些关于使用 mysql.connect_timeout 从 PHP 设置 MySQL 连接超时的帖子。我想知道这个从 PHP 设置的超时是否只是超时与 MySQL 的初始连接或对数据库的特定查询有效?

我的情况是,我在顶部有一个连接到 MySQL 的页面,然后我一个接一个地执行对 MySQL 的 3-4 个查询。第一个和第二个查询只需要 1-2 秒即可执行,而第三个查询需要 20 秒。现在,如果第三个查询花费超过 20 秒,我想调用超时。所以,这里的问题是,从 PHP 设置这个超时时间适用于与数据库的初始连接,或者它也适用于每个后续查询(独立地)。如果稍后是这种情况,那么我如何将其设置为在 20 秒后超时以进行第三次查询?

4

6 回答 6

7

connect_timeout 参数仅在连接时有效。检查您的数据库服务器是否可以在 20 秒左右到达是很有用的。一旦连接,指定的超时不再有效。

我在官方 mysql 手册页上找不到任何查询超时参数:http: //dev.mysql.com/doc/refman/5.5/en/server-system-variables.html所以我认为这不可能。

于 2012-03-08T12:57:08.283 回答
5

看见:

set_time_limit(0);   
ini_set('mysql.connect_timeout','0');   
ini_set('max_execution_time', '0');   
于 2013-08-16T14:36:57.133 回答
3

sigalarm 是你的朋友。您可以设置警报,并使用信号处理程序来检测警报。

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

于 2012-12-03T03:23:55.877 回答
3

使用 MySQL 5.7.4 或更高版本并设置适当的“max_statement_time”变量,如果达到超时查询将失败

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

于 2016-01-04T14:26:12.950 回答
3

它在您的 php 配置文件中。此文件的位置因系统而异。在 Ubuntu 和 Debian 上,它位于 /etc/php5/apache2/php.ini

mysql.connect_timeout = 60 /* the default value is 60 seconds */
于 2016-03-10T07:46:48.167 回答
0

您将不得不派生一个子进程,如果在 20 秒内未满足某些条件,父进程将终止子进程。

或者使用像 node.js 这样的语言,它不会阻塞当前线程进行查询等 IO 操作。

于 2014-06-16T23:14:04.767 回答