博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL server has gone away的解决方案
阅读量:5915 次
发布时间:2019-06-19

本文共 924 字,大约阅读时间需要 3 分钟。

  hot3.png

MySQL server has gone away有几种情况:

1、应用程序(比如PHP)长时间的执行批量的MYSQL语句,最常见的就是采集或者新旧数据转化。

解决方案,在my.cnf文件中添加或者修改以下两个变量:

wait_timeout=2880000

interactive_timeout = 2880000
关于两个变量的具体说明可以google或者看官方手册。
如果不能修改my.cnf,则可以在连接数据库的时候设置CLIENT_INTERACTIVE,比如:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)

2、执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段。
比如,图片数据的处理
解决方案
在my.cnf文件中添加或者修改以下变量:
max_allowed_packet = 10M(也可以设置自己需要的大小)
max_allowed_packet 参数的作用是,用来控制其通信缓冲区的最大长度。
可能有很多人遇到过标题中的这个错误。之前我们也经常遇到,一直没有认真找是什么原因。今天花了些时间google了下。原来,这个问题并不是MySQL的bug, 它本质是一个配置问题, 解决起来也不麻烦。

在Mysql客户端中, 通过 SHOW VARIABLES; 语句可以查看Mysql系统变量。这些变量中名为 wait_timeout 的变量的值过于小,就是造成这个错误的根源。这个变量的含义是:如果在该连接在 wait_timeout 时间内没有进行任何查询(idle时间超时), 服务器将自动关闭这个连接。

如果你的脚本在执行了一个查询之后,接着是另外一个很耗时的没有任何数据库查询的操作(超过了wait_timeout设置的值,单位是秒), 之后你再进行数据库操作,就一定会遇到标题所示的错误。

我的解决方案是,在必要的地方,数据库连接之后,立刻执行一句”SET SESSION wait_timeout=65535″。

转载于:https://my.oschina.net/guyson/blog/117518

你可能感兴趣的文章
html+css+js制作一个简易计算器
查看>>
基于iPhone 上的运动协处理器M7判断用户当前的运动(姿态)类型
查看>>
Android Note - 代码优化
查看>>
vue-cli中模拟数据的两种方法
查看>>
Item-Resume
查看>>
【Java面试题系列】:Java中final finally finalize的区别
查看>>
Babel知识体系浅谈
查看>>
ES6 Promise 执行解析
查看>>
接口管理平台 eoLinker AMS 专业版V3.3发布:分享项目可以测试并选择分享内容等...
查看>>
异步Servlet
查看>>
dyld_shared_cache_extract_dylibs failed
查看>>
浅析ConcurrentHashMap(1.8)
查看>>
我用Python告诉你武汉房价
查看>>
maven 将本地jar打入本地仓库
查看>>
配置elasticsearch6.5.4-ik分词插件安装,测试,扩展字典
查看>>
5分钟搞定 CSS Grid 布局
查看>>
区块链+网络安全应用前景如何?
查看>>
LTR(Learning to Rank)小结
查看>>
MonkeyDev使用,加入flex
查看>>
331urllib
查看>>