【发布时间】: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。