【问题标题】:PHP MySQL set Connection TimeoutPHP MySQL 设置连接超时
【发布时间】:2012-03-05 05:41:26
【问题描述】:

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

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

【问题讨论】:

    标签: php mysql connection-timeout


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      看到它:

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

      【讨论】:

      • max_execution_time 仅影响 cpu 使用 - 查询数据库不会影响 php 进程的 cpu 使用
      • set_time_limit(0);在循环之外没用
      【解决方案3】:

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

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

      【讨论】:

      • 看起来很有趣,你能举个例子吗?
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

        • 任何解释为什么我对一个有效的答案投了反对票?
        • 因为它改变了可能影响另一个应用程序的广泛系统配置。
        【解决方案6】:

        你必须fork一个子进程,如果20秒内不满足某些条件,父进程将杀死子进程。

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

        【讨论】:

          猜你喜欢
          • 2011-11-11
          • 1970-01-01
          • 1970-01-01
          • 2012-05-01
          • 2013-04-18
          • 1970-01-01
          • 2013-02-05
          • 2012-06-14
          • 2015-11-23
          相关资源
          最近更新 更多