mysql结合golang一次线上连接池事故处理

mysql 服务器默认断开86400 (8小时),以前搞游戏的时候经常一早起来服务挂掉(因为半夜比较多空闲mysql被服务器断开了)解决方案 写一个线程定时ping 能解决。
最近搞的游戏加速器项目。mysql 参数被运维同学改成10了,导致线上mysql 一直 报错 EOF,github里面也挺多人说的。


git图片.png

经过多次调试无果 以为搞不定就先把

//这样设置关闭掉golang mysql 的连接池,每次查询时创建连接,因为阿里云的数据使用域名 地址,总体下来连接时间不稳定 从毫秒级别 到秒级别 (我线上接口因为这个参数 最差时一个简单查询5s)
SetMaxIdleConns(0)  //空闲连接维持数量 0 关闭
SetMaxOpenConns(0) //限制连接数量如果有mysql 事务忘记关闭 导致连接泄露时这个会加速暴露问题
SetConnMaxLifetime(0) //这个配合 空闲连接数量 > 0 时,此参数要 WAIT_TIMEOUT/2 > maxlitetime
//研究完 
SetMaxIdleConns(5)  //最多保持5个空闲连接
SetMaxOpenConns(100) //最大连接数不超过100
SetConnMaxLifetime(60) //1分钟一次心跳 WAIT_TIMEOUT 建议(5分钟~30分钟之间)

优化之后 接口 稳定在10毫秒以内

修改记录.png
阿里云参数.png

总结
环境 go1.12.5
开发环境 window10
线上环境 centos7 (跨平台编译)

完美解决问题。mark一下发现挺多小伙伴遇到这个问题的。希望能帮助大家少躺坑。开发不易。

你可能感兴趣的:(mysql结合golang一次线上连接池事故处理)