golang mysql: packets.go:122: closing bad idle connection: EOF 的一些见解

如上图,自从Java实习结束,兜兜转转来到一家Go公司实习,使用MySQL的时候出现了上图这个问题。

怪不得业务上出现了奇奇怪怪的问题,导致后端这里需要多写一些补偿机制的接口和后台任务!!

	// 设置连接池
	sqlDB.SetMaxOpenConns(conf.MaxOpenConns)
	sqlDB.SetMaxIdleConns(conf.MaxIdleConns)
	sqlDB.SetConnMaxLifetime(time.Hour)

我的代码里面设置的存活时间很长,但是通过查看MySQL的变量发现,MySQL的连接超时时间只有120s,导致代码层使用到了已经失效的连接,sql也就对应无效了。

粗略的计算为 MySQL超时时间* 0.8 = 代码设置的存活时间;

因此,要么就修改MySQL的超时时间为5400s(也就是1h30min),要么就把代码的存活时间设置为90s左右

-- 临时修改(重启失效)
SET GLOBAL wait_timeout = 5400;  

-- 永久修改(需编辑 my.cnf/my.ini)
[mysqld]
wait_timeout = 5400
interactive_timeout = 5400  -- 交互式连接超时(建议与wait_timeout一致)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北北牌屈四巴格!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值