当前位置: 代码网 > it编程>数据库>Mysql > MySQL server has gone away的问题解决

MySQL server has gone away的问题解决

2024年07月21日 Mysql 我要评论
一、可能是mysql连接超时原因:mysql长连接时,很长时间没有新的请求发起到达服务端,当这个时间超过配置的最大超时时间时,mysql就会强行关闭链接。此后再通过这个connection发起查询的时

一、可能是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内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com