Mysql连接无效(invalid connection)问题及解决
Mysql连接无效invalid connection
一般连接数据库的代码库都有实现连接池,如golang语言database/sql库,其中SetConnMaxLifetime(d time.Duration)是用来设置连接池里每条连接关闭的时间,当d <= 0时,连接池里的连接永久重用,即永远都在连接池里,拿来就用,不管此连接是否真的有效(这里有问题,下面讲)。
当d > 0时,到了时间d才会关闭连接,把连接移出连接池,但这并不是时间一到就关闭,因为当连接还在使用时会等连接完成之后,等下一个清理连接周期(周期为d)时会关闭连接,移出连接池。
Mysql为了防止空闲连接过多,超过了参数mysql_connection之后会拒绝新连接,mysql会自动关闭空闭连接超过wait_timeout参数的时间,会关闭使用中超过interactive_timeout参数的连接。
由于mysql会自动关闭超时连接,所以database/sql的SetConnMaxLifetime()不能设置为永久有效,要不然连接已经被mysql关闭了,但还是拿着失效的连接使用就会报invalid connection。
解决的方案
SetConnMaxLifetime()设置的时间小于wait_timeout就行,一般建议wait_timeout/2。
Mysql远程连接不生效
记录一下,一般这种情况都是设置 mysql 表中对应 root 用户的 Host 从 localhost 改为 %,但是怎么弄都不生效,没办法只能看看 mysql 配置文件 mysqld.cnf
里面找到了一项内容如下图:

把上面箭头所指处注释后一试,还真是这个,不知道这个什么时候设置的,太无语了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
win2008 R2服务器下修改MySQL 5.5数据库data目录的方法
这篇文章主要介绍了win2008 R2服务器下修改MySQL 5.5数据库data目录的方法,需要的朋友可以参考下2016-04-04
MySQL提示表不存在的解决error:1146:Table doesn‘t exist的原因和解决
在使用MySQL的过程中,有时会遇到“Table doesn't exist”(表不存在)的错误,错误代码通常为1146,这个问题可能由多种原因引起,本文将帮助你诊断和解决这个问题,如果遇到同样问题的小伙伴跟着小编一起来看看吧2024-12-12
解说mysql之binlog日志以及利用binlog日志恢复数据的方法
下面小编就为大家带来一篇解说mysql之binlog日志以及利用binlog日志恢复数据的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-03-03
SpringBoot连接MySQL获取数据写后端接口的操作方法
今天通过本文给大家介绍SpringBoot连接MySQL获取数据写后端接口的操作方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧2021-11-11


最新评论