长时间未操作,数据库连接出错了怎么搞?


QQ图片20170329091335.png

还在测试阶段,通常这样开着前一天测试还好好的,第二天继续连就出现这个错误了,要重新打开才可以,错误的地方排查了是自定义的Sql静态类执行mysqli_query时引起的,请问除了用Workerman/MySQL,想这种自定义的sql类,要怎么才能避免这种情况

QQ图片20170329092734.png

已邀请:

walkor

赞同来自: akebe 254135495

workerman是常驻内存的服务,因为mysql链接长时间不通讯,被mysql服务端断开了。
当php里再次使用这个链接时就触发了错误。

以下方法任意一种可以解决:
1、使用workerman提供给的 Workerman/MySQL类 ,里面提供了断线重连,不会有这个问题。
2、每次使用完mysql断开链接,销毁链接。下次使用mysql的时候重新初始化链接。
3、在调用mysql底层接口时捕获下异常或者判断下错误码(pdo_mysql里是2006),根据异常或者错误码判断链接是否已经断开,如果断开就重新连一次,然后重新执行要执行的sql
4、设置mysql的超时时间,默认貌似是8小时,改成更长时间。不过这种方法治标不治本,比如mysql重启,那么链接肯定是断开了的,php再次使用这个链接还会报错。
5、使用mysql链接的时候记录下本次使用链接的时间戳,下次使用的时候当前时间减去间戳等于链接空闲的时间,如果链接空闲的时间过长,则销毁链接,重新建立一个mysql链接。当然这种也是治标不治本的方法。
6、搞个定时器,定时发一个空查询给mysql服务端,类似心跳的功能,可以定时检测mysql链接是否存活,不存活就关闭重连。也是治标不治本的方法,不过比方法4方法5 稍微好一些。
7、其它方法可以自己想象

要回复问题请先登录注册