首页  >  文章  >  数据库  >  为什么我的 MySQL 查询在 60 秒后超时,尽管'wait_timeout”要高得多?

为什么我的 MySQL 查询在 60 秒后超时,尽管'wait_timeout”要高得多?

Susan Sarandon
Susan Sarandon原创
2024-11-27 05:07:13298浏览

Why is my MySQL query timing out after 60 seconds, even though `wait_timeout` is much higher?

MySQL 服务器已消失 - 与预期情况相差 60 秒

本文讨论了导致 MySQL 服务器在执行持续 120 秒的查询时经过 60 秒后超时并引发错误的问题。尽管查询运行正常,但 PHP 脚本中的一个问题导致了这个错误。

问题症状

  • 通过 PHP 运行查询 SELECT SLEEP(120); 在 60 秒后超时。
  • 从 MySQL 客户端运行相同查询成功执行。
  • 每次超时的时间都是固定的 60 秒,这表明它可能是设置问题,而不是资源限制。

系统配置

  • Windows Server 2003
  • MySql 5.1.36-community
  • PHP 5.3

分析

检查 SHOW VARIABLES 输出后,发现 wait_timeout 已设置为 28800(480 分钟),但错误仍然存在。这表明 wait_timeout 不是问题所在。

解决方案

问题的原因是 PHP 选项 mysql.connect_timeout。此选项不仅用于连接超时,还用于等待来自服务器的第一个响应。由于查询持续时间设定为 120 秒,而 mysql.connect_timeout 默认设置为 60 秒,因此服务器在 60 秒后关闭连接,导致错误。

通过将 mysql.connect_timeout 增加到至少 120 秒,解决了此问题。这通过以下代码实现:

ini_set('mysql.connect_timeout', 300);
ini_set('default_socket_timeout', 300); 

这将 mysql.connect_timeout 增加到 300 秒,避免了在等待服务器响应时 premature 地关闭连接。

以上是为什么我的 MySQL 查询在 60 秒后超时,尽管'wait_timeout”要高得多?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn