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

· · 2908 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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一次线上连接池事故处理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2908 次点击  ∙  2 赞  
加入收藏 微博
1 回复  |  直到 2020-10-26 19:52:30
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传