【问题标题】:PHP Mysql is going away after ~60 secondsPHP Mysql 在约 60 秒后消失
【发布时间】:2016-12-16 04:55:32
【问题描述】:

首先,我已经浏览了一些相关的帖子,但没有运气。

我遵循了MySQL server has gone away - in exactly 60 seconds 中提供的解决方案 一开始就设置这个值:

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

但似乎错误仍然存​​在。

错误发生在执行查询之前:用于处理 mysql 操作的数据库类,执行 ping (mysqli_ping) 以刷新连接(猜想这就是使用 mysql ping 的含义)但在某些时候, ~60 它会抛出这个警告:

警告:mysqli_ping():MySQL 服务器已在...中消失

我有什么遗漏吗?

更新 我知道问题出在哪里了。

我将进一步解释我的工作流程。 我建立了两个不同的数据库连接,我做的第一个只是用于检索数据,第二个用于插入所有获得的数据(逐行)。由于第二个连接是执行操作的那个,我以为是那个产生服务器的连接消失了,但事实证明错误是由空闲连接(第一个)引发的。

我做的解决方法是在查询完数据后立即关闭连接(第一个因为它不再使用)。

第二个连接有足够的时间不会超时。

第一个连接到远程数据库,第二个连接到我的本地服务器,所以我可以完全控制第二个。

我与远程 MySQL 服务器的连接的奇怪之处在于,当我从我的 PHP 脚本连接时,大约 60 秒后,它达到超时,但如果我从控制台连接它,连接没有超时。你知道我怎样才能避免超时(服务器已经消失)吗?正如我上面所说,我已经有一个解决方法,但我想知道为什么 PHP 在大约 60 秒后超时,而从控制台我可以每小时保持连接。

【问题讨论】:

  • 运行查询SELECT @@WAIT_TIMEOUT;。默认值为 28800,但我希望您会看到 60。

标签: php mysql


【解决方案1】:

您设置的那些配置更改了客户端连接,这个问题与服务器有关:它是关闭连接的服务器。要更改此配置,您必须更改 my.cnf 上 wait_timeout 的值

来源: http://dev.mysql.com/doc/refman/5.7/en/gone-away.html http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_wait_timeout

还有一件事:改变这可能不是你能做的最好的事情。首先尝试改进您的查询。

【讨论】:

    猜你喜欢
    • 2010-12-11
    • 2018-06-23
    • 2013-02-02
    • 1970-01-01
    • 2018-10-10
    • 2016-09-19
    • 2017-05-28
    • 2011-12-27
    • 1970-01-01
    相关资源
    最近更新 更多