文档章节

常驻内存的PHP程序mysql报错 mysql has gone away

花花世界欢乐多
 花花世界欢乐多
发布于 2017/06/22 22:05
字数 464
阅读 222
收藏 0

常驻内存的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_ping的方案,每次mysql_query进行连接检测或者定时连接检测。这个方案不是最好的。原因是:
mysql_ping需要主动侦测连接,带来了额外的消耗
定时执行mysql_ping不能解决问题,如刚刚执行过mysql_ping检测之后,连接就关闭了;

捕获错误码,进行断线重连

它的原理是:mysql_query执行后检测返回值
如果mysql_query返回失败,检测错误码发现为2006/2013(这2个错误表示连接失败),再执行一次mysql_connect
执行mysql_connect后,重新执行mysql_query
如果mysql_query返回成功,那么连接是有效的,这是一次正常的调用
众多知名的PHP常驻进程框架均采用第二种方案
例如:
swoole_framework中query方法
workerman中数据库连接类execute方法
很明显第二种方式是高可靠低消耗的方案,推荐大家在常驻环境里使用

© 著作权归作者所有

花花世界欢乐多
粉丝 5
博文 30
码字总数 14725
作品 0
成都
程序员
私信 提问
mysqli_ping(): MySQL server has gone away

PHP 错误信息 错误级别代号 值 常量 说明 2 E_WARNING 运行时警告 (非致命错误)。仅给出提示信息,但是脚本不会终止运行。 8 E_NOTICE 运行时通知。表示脚本遇到可能会表现为错误的情况,但是...

aisuhua
09/29
0
0
MySQL server has gone away问题解决方法

1、应用程序(比如PHP)长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。   解决方案:   在my.cnf文件中添加或者修改以下两个变量: waittimeout=2880000 interactiv...

于涛ns_天使
2013/02/05
2.7K
0
使用mysql的长连接

使用mysql的长连接 有个资料看得我云里雾里的。现在用自己的言语来总结一下,写文字,能够加深自己的理解。也会在写的过程中帮助自己发现理解方面瑕疵,继续查资料求证。 短链接的缺点:创建...

蜗牛奔跑
2016/03/09
31
0
MySQL server has gone away报错原因分析

在平时和开发的交流 以及 在论坛回答问题的或称中会发现这个问题被问及的频率非常高。 程序中报错: MySQL server has gone away 是什么意思? 如何避免? 因此,感觉有必要总结一下发生这个...

donny945
2014/03/21
154
0
mysql server has gone away的原因

之前遇到开发询问“mysql server has gone away”的问题,想当然的就认为是由于太长时间没有操作,导致超过MySQL服务端上的wait_timeout的设置,最终连接被MySQL服务端回收了。 最近一次突然...

我爱吃葱花
2015/10/09
239
0

没有更多内容

加载失败,请刷新页面

加载更多

华为手机翻译功能怎么使用?这三种方法请务必收藏

华为手机翻译功能怎么使用?在我们的生活中会经常遇到翻译问题,许多外语不好的朋友该怎么办呢?华为手机已经为我们解决了这个问题,今天小编就教大家学会使用华为手机中的三种翻译技巧,需要...

翻译小天才
11分钟前
2
0
企业服务软件开发中需要注意的三个问题

在开发企业服务软件时,我们需要分为:业务需求、用户需求、产品需求,三大需求层次,三个层次互相关联,企业服务软件开发首先要服务业务,需要满足业务的需求,再关注用户体验,也就是用户需...

积木创意科技
14分钟前
2
0
C++容器底层数据结构

内置数组: int arr[10][10];memset(arr,0,10*10*sizeof(int)); //初始化int tmp[10][10];memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷贝 void *memcpy(void *destin, void *source,......

SibylY
15分钟前
2
0
Dubbo-自适应拓展机制

背景 在 Dubbo 中,很多拓展都是通过 SPI 机制进行加载的,比如 Protocol、Cluster、LoadBalance 等,这些都是Dubbo的基础组件。这些基础组件的拓展不是在系统框架启动阶段被加载,而是拓展方...

rock-man
43分钟前
6
0
Kali安装fcitx输入法(五笔)

安装fcitx > sudo apt-get install fcitx-rime fcitx-config-gtk3 重启 > sudo reboot fcitx配置 效果就是这样 配置输入法切换 系统设置...

yeahlife
45分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部