MySQL server has gone away的问题解决
作者:半桶水专家
一、可能是mysql连接超时
原因:mysql长连接时,很长时间没有新的请求发起到达服务端,当这个时间超过配置的最大超时时间时,mysql就会强行关闭链接。此后再通过这个connection发起查询的时候,就会报错server has gone away。
解决办法:可以将timeout时间设置长一点:
set global wait_timeout =3600 ; //非交互式链接
set global interactive_timeout=3600 ; //交互式链接
但是这样会长时间占用mysql链接,消耗资源。
二、可能是发送的SQL语句太长
原因:mysql服务器端和客户端在一次传送数据包的过程中,数据包的大小大于max_allowed_packet设置的值。
解决办法:可以将max_allowed_packet值设置大一点,set global max_allowed_packet=3600。
三、可能MySQL 服务宕了
可以查看mysql的运行时长:show global status like 'uptime'; 。来判断是否属于这个原因引起的。
uptime很长说明mysql运行很长时间了,排除mysql服务宕机的可能。
扩展:
应用程序长时间的执行批量的MYSQL语句。执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理。都容易引起MySQL server has gone away。
解决MySQL server has gone away :
1、应用程序长时间的执行批量的MYSQL语句。最常见的就是采集或者新旧数据转化。或者长时间闲置数据库连接
解决方案:
在my.cnf/my.ini文件中添加或者修改以下两个变量:
wait_timeout=2880000 interactive_timeout = 2880000
如果不能修改my.cnf/my.ini,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = "set interactive_timeout=24*3600"; mysql_real_query(...)
2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。比如,图片数据的处理
解决方案:
在my.cnf/my.ini文件中添加或者修改以下变量:
max_allowed_packet = 10M(也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
到此这篇关于MySQL server has gone away的问题解决的文章就介绍到这了,更多相关MySQL server has gone away内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!