前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于MySQL server has gone away

关于MySQL server has gone away

作者头像
仙士可
发布2020-09-24 10:09:38
7990
发布2020-09-24 10:09:38
举报

当 php 与mysql之间的连接并非php正常回收,断开时,将会报错 "MySQL server has gone away"

该报错表示 mysql连接已经失效,需要重新发起连接.

具体断开原因有以下几点:

mysql 服务重启

当 mysql服务重启之后,将会断开原有的连接,原来的连接断开之后,php继续调用则会报错,

重启包括异常重启,手动重启 

可以通过

show global status like 'uptime';

查看mysql的运行时间,推断出他上次的启动时间.

mysql连接超时

当mysql连接成功之后,如果长时间没有操作,mysql服务器将主动关闭此连接

可以通过

show global variables like 'wait_timeout';

查看mysql服务器的连接等待时间,超过该时间没有进行任何操作,mysql将主动关闭此连接

mysql 连接被kill

mysql连接成功之后,可通过

show PROCESSLIST

查看当前mysql的连接数以及连接状态

仙士可博客
仙士可博客

可通过  命令,

kill id

进行主动关闭某一个连接

执行语句过长

当 sql 大小超出 

show global variables like '%max_allowed_packet%';

时,mysql服务器将拒绝解析数据,直接断开响应,从而导致断开连接

解决方案

现在我们知道了 MySQL server has gone away 具体产生原因,那么如何解决此问题呢?

首先我们需要了解,直接原因是连接断开,连接断开无法避免,没有任何方法可以确保一个tcp连接永远有效,我们只能尽量避免出现此状况.

定时ping连接

在mysql 连接成功之后,为了避免太久没有操作被mysql主动断开,我们可以主动,定时的去操作一次mysql,例如

select 1;

来保证 mysql连接的活跃性

断线重连

就算是定时ping,也可能会因为mysql重启,网络连接动荡导致连接断开,那么我们应该在定时ping 出错的时候,及时回收连接,重新发起连接,确保正常业务不会收到影响

注意sql语句的大小

当执行语句过长时,也会出现断线问题,我们需要在php层就做好对sql语句的判断,不能过长,或者调大mysql的

max_allowed_packet

配置项

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • mysql 服务重启
  • mysql连接超时
  • mysql 连接被kill
  • 执行语句过长
  • 解决方案
    • 定时ping连接
      • 断线重连
        • 注意sql语句的大小
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档