php rabbitmq报错重连,【mysql】php查询报错Error while sending QUERY packet. PID=xxx

背景:使用Yii2命令行模式开启脚本监控rabbitmq队列,当队列有订单信息,执行查询,更新操作(相当于PHP文件写个查询,更新,使用命令行启动)

问题:一开始监控没有问题,每过一段时间会抛出错误

> Error while sending QUERY packet. PID=25370. The SQL being executed was: 一句sql语句(此sql直接执行没有错误).

已经找到问题解决方案,由于我等待消息队列是一个长连接,而我在等待回调前有个数据库连接,数据库的wait_timeout=28800,所以只要下一条消息离上一条消息超过8小时,就会出现这个错误,我把wait_timeout设置成10,并且捕获异常,发现真实的报错是 MySQL server has gone away ,

所以只要在把等待回调前那次数据库连接主动close掉就可以解决问题

回答

已经找到问题解决方案,由于我等待消息队列是一个长连接,而我在等待回调前有个数据库连接,数据库的wait_timeout=28800,所以只要下一条消息离上一条消息超过8小时,就会出现这个错误,我把wait_timeout设置成10,并且捕获异常,发现真实的报错是 MySQL server has gone away ,

所以只要在把等待回调前那次数据库连接主动close掉就可以解决问题

你的这句sql是自己写的原生态的sql?还是框架自带的sql处理方法?如果是你自己写的sql建议你换成框架里面的sql处理方法试试

比较好的解决方案应该是

拿到每次执行数据库操作的结果,如果成功,返回到上层应用。如果失败,就重连mysql服务器就可以了。

yii2.0 console控制台程序,消化redis队列写日志时,也遇到了这个问题。最后再写日志之前,关闭一下mysql连接就好了。

Yii::$app->db->close();

// 把日志信息写入日志表。

…..

$logModel->insert();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值