开发者

MySQL server has gone away的问题解决

开发者 https://www.devze.com 2024-08-12 13:13 出处:网络 作者: 半桶水专家
目录一、可能是mysql连接超时二、可能是发送的SQL语句太长三、可能MySQL 服务宕了扩展:一、可能是mysq编程客栈l连接超时
目录
  • 一、可能是mysql连接超时
  • 二、可能是发送的SQL语句太长
  • 三、可能MySQL 服务宕了
  • 扩展:

一、可能是mysq编程客栈l连接超时

原因:mysql长连接时,很长时间没有新的请求发起到达服务端,当这个时间超过配置的最大超时时间时,mysql就会强行关闭链接。此后再通过这个connection发起查询的时候,就会报错server has gone away。

解决办法:可以将timeout时间设置长一点:

swww.devze.comet global wait_timeout =3600 ; //非交互式链接

set global interactive_timeout=3600 ; //交互式链接

但是这样会长时间占用mysql链接,消耗资源。

二、可能是发送的SQL语句太长

原因:mysql服务器端和客户端在一次传送数据包的过程中,数据包的大小大于max_allowed_packet设置的值。

解决办法:可以将max_allowed_packet值设置大一点,set global max_al编程客栈lowed_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_IqNNbGPOFtNTERACTIVE,比如:

sql = "s编程客栈et 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内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

0

精彩评论

暂无评论...
验证码 换一张
取 消