PHP程序mysql报mysql has gone away错误的原因及解决办法


本文主要给大家介绍PHP程序mysql报mysql has gone away错误的原因及解决办法,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下PHP程序mysql报mysql has gone away错误的原因及解决办法吧。在cli环境下,PHP程序需要长时间运行,客户端与MySQL云服务器之间的TCP连接是不稳定的。不稳定的原因有以下可能:MySQL-Server会在一定时间内自动切断连接PHP程序遇到空闲期时长时间没有MySQL查询,MySQL-Server也会切断连接回收资源其他情况,在MySQL云服务器中执行kill process杀掉某个连接,MySQL云服务器重启网络抖动这时PHP程序中的MySQL连接就失效了。如果仍然执行mysql_query,就会报一个MySQL server has gone away的错误。程序开发云主机域名处理不到就直接遇到致命错误并退出了。所以PHP程序中需要断线重连。有很多人提出了mysql_ping的方案,每次mysql_query进行连接检测或者定时连接检测。这个方案不是最好的。原因是:mysql_ping需要主动侦测连接,带来了额外的消耗。定时执行mysql_ping不能解决问题,如刚刚执行过mysql_ping检测之后,连接就关闭了;它的原理是:mysql_query执行后检测返回值,如果mysql_query返回失败,检测错误码发现为2006/2013(这2个错误表示连接失败),再执行一次mysql_connect执行mysql_connect后,重新执行mysql_query如果mysql_query返回成功,那么连接是有效的,这是一次正常的调用。swoole_framework中query方法。workerman中数据库连接类execute方法。很明显捕获错误码,进行断线重连,是高可靠低消耗的方案,推荐大家在常驻环境里使用。TP+workman也会出现类似的情况,TP从 V5.0.6+版本开始,支持Mysql的断线重连机制,默认关闭,需要的话,在application/databases.php数据库配置文件中添加看完以上关于PHP程序mysql报mysql has gone away错误的原因及解决办法,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。

相关推荐: MySQL 8.0资源组有效解决慢SQL引发CPU告警

资源组的作用是资源隔离(你可以理解为开通云主机时勾选的硬件配置),将线上的慢SQL线程id分配给CPU一个核,让它慢慢跑,从而不影响CPU整体性能。创建一个资源组slowsql_rg为资源组名字type=user 来源是用户端的慢SQLvcpu=3 给它分配到…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/09 13:13
下一篇 06/09 13:13

相关推荐