
如上图,自从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一致)

被折叠的 条评论
为什么被折叠?



