php 脚本连接出现General error: 2006 MySQL server has gone away错误原因排查

今天在公司测试环境中和其他部门项目联调,等了好长时间也没有发现我负责项目数据传递过去,看日志发现出现:

exception:HY000:SQLSTATE[HY000]: General error: 2006 MySQL server has gone away 

首先说明 我的是后台php以守护进程的形式运行的

第一反应 以为是mysql挂了 看来下mysql也是ok的,带着不解百度了下,发现是mysql超时拒绝连接

mysql有连接参数:

wait_timeout=100
interactive_timeout=100

可以用:

how variables like “%timeout%”

去查看 默认都是八小时

  1. interactive_timeout
    参数含义:
    服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。
    参数默认值:28800秒(8小时)
  2. wait_timeout
    参数含义:服务器关闭非交互连接之前等待活动的秒数。
    在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。
    参数默认值:28800秒(8小时)

    MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,最终肯定会达到MySQL Server的连接上限数。

mysql会根据设置的timeout时间内如果连接空闲,就会断开连接回收资源。这就是问题所在 我的php以守护进程形式运行,使用PDO使用的单例模式,当长时间空闲链接,mysql就会释放连接,此时PDO单例有没有重试机制就会导致此问题

解决办法:
1.脚本设置超时时间,超过时间重新启动,或者pdo连接失败后重连
2.修改mysql的超时时间
我建议使用前者 而非后者

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值