关于"[MYSQL ERROR(2006):MySQL server has gone away]"的解决方法

产生这个错误一般是由于两个方面的原因,一个是由于向mysql server发送的数据包大小超过了参数max_allowed_packet设置的大小,这个可以通过减小数据包或加大max_allowed_packet参数来解决

但是对于大多数情况来说都是由于mysql的wait_timeout这个参数决定的,默认值是288000,即8个小时,空闲8个小时没动作,mysql就会结束该连接,这个问题有以下几种解决办法:
1、修改mysql服务器的全局配置,增大wait_timeout参数值;
2、在mysql_real_connect函数连接后,设置当前连接中的wait_timeout参数;
3、在mysql_real_connect函数之前,调用mysql_options函数启用MYSQL_OPT_RECONNECT选项,启用这个选项后connect后,在mysql_real_query函数发现连接丢失就会自动重新连接数据库并执行当前sql语句;
4、在当前的连接进程中新建一线程定时调用mysql_ping函数,这个函数当检查到mysql连接断开后,会自动重连,但是一定要注意,这个重连也和MYSQL_OPT_RECONNECT选项有关系,如果没有指定这个选项,mysql_ping是不会自动重连的;

不过,请注意,自动重新连接也会导致一些副作用,如下:
    * 任何活动的交易都被回滚,autocommit模式被置为reset。
    * 所有表锁都释放
    * 所有临时表是关闭(撤消)
    * 会话变量被重新初始化为相应的变量。
    * 用户变量设置都将丢失。
    * 编制报表释放。
    * 句柄变量被关闭。
    * LAST_INSERT_ID()被重置为0 。
    * 使用GET_LOCK()获得的锁被释放 

5、最后一个方法也是最灵活的方法,就是自己在应用底层实现,当mysql_real_query返回错误代码为[2006]时就自动调用mysql_real_connect重新连接并设置自己的环境和会话信息等;

最好的办法是在mysql_real_connect函数前,启用MYSQL_OPT_RECONNECT选项


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值