首先,我已经完成了一些相关的帖子,但没有运气。
我按照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秒后超时,而从控制台我可以每小时保持连接。
答案 0 :(得分:3)
您设置的那些配置会更改客户端连接,此问题与服务器有关:它是关闭连接的服务器。要更改此配置,您必须更改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
还有一件事:改变这可能不是你能做的最好的事情。首先尝试改进您的查询。