03-MySQL连接失败之 Communications link failure

项目场景和问题:

在进行数据采集时,有的地方采集时间比较久,大概一天半,采集过程中就会出现无法连接数据库问题,具体问题截图如下图所示。

在这里插入图片描述

在这里插入图片描述

原因分析:

经网上查询,个人觉得和MySQL的配置有关,以下是具体说明。
当项目进行第一次连接MySQL数据库之后,在8小时之内系统没有使用这条连接对数据库进行任何操作,MySQL服务端为节省内存资源,自动关闭了这条连接,而客户端还认为连接存在,8小时之后再次操作数据库,报错连接不到数据库!

知识拓展

MySQL有wait_timeout = n 和interactive-timeout = n 两个参数,
查看命令:show variable like ‘%timeout%’;
含义分别是:
wait_timeout 指的是关闭一个非交互式的连接之前需要等待的秒数,默认值8小时,
interactive_time则是交互式的连接之前需要等待的描述,取值范围随wait_timeout变动,

比如进入MySQL终端操作数据库就是交互式,如果没有操作的时间超过interactive_time的时间就会自动断开,
wait_timeout是当一个客户端连接到MySQL数据库之后,如果客户端不自己断开,也不进行任何操作,MySQL会为这个连接保留8小时,超过这个时间,MySQL为了节省资源,就会在数据库端断开这个连接,当然,在此期间,客户端进行任意操作,MySQL都会重新计算时间,这是非交互式。

MySQL连接是有上限的,且连接需要消耗内存,因此为了保证正常连接,连接完成之后,需要即时断开并释放占用的内存,如果MySQL有大量闲置的连接,他们不仅会白白消耗内存,而且如果连接还在累加,那么肯定会达到连接上限,这时会报 too many connection 错错误。
对于wait_timeout值的设置,应根据项目运行情况而定,在系统运行一段时间后,使用show process list查看连接状态,如果发现大量的sleep状态的连接进程,则说明参数设置过大。

问题:如果只在配置文件中设置wait_timeout参数,重启服务之后查看,发现参数设置未生效,解决方案是两个参数同时设置。
【mysqld】
wait_timeout=100
interactive_timeout=100
重启MySQL Server进入后,查看设置已经生效。

解决方案:

1.临时解决
通过命令临时设置MySQL的wait_timeout值,比如24小时(606024),MySQL服务重启则失效。

set global wait_timeout = 86400
show variable like '%timeout%'

2.修改my.ini配置文件
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000

参考网上问题解析分享的链接
1.https://blog.csdn.net/wuzhengxuan/article/details/84167923
2.https://blog.csdn.net/qq_21137441/article/details/102916199?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170254143416800192252292%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170254143416800192252292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-102916199-null-null.142v96control&utm_term=mysql%20wait_timeout%E6%9F%A5%E8%AF%A2&spm=1018.2226.3001.4187
3.https://cloud.tencent.com/developer/article/1650141
4.https://blog.csdn.net/feiying0canglang/article/details/122957770

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值