业务系统 django 应用报错 MySQL Connection not available 问题处理
背景
业务系统切换数据后,频繁出现 MySQL Connection not available 错误异常,出现频率不确定,出现问题的接口也随机出现,搜索日志系统,问题出现在切换数据库之后,问题截图如下
定位方向
开始时怀疑是请求增多导致数据库连接不足出现了异常,分析错误路径,找到出错最频繁的接口,压测此接口,无法复现问题;
继续看出错此问题前后应用代码修改情况,无新增代码,开始往切换了数据库方向定位;
DATABASES = {
'default': {
'ENGINE': 'mysql.connector.django',
****
'CONN_MAX_AGE': 3600,
*****
},
}
数据库驱动这边使用了mysql官方驱动
参数 CONN_MAX_AGE 这里设置的是3600,查看官方手册,此函数定义
很明显是用来持久化管理数据库连接的。
查看迁移前后,mysql数据库的数据库连接超时管理设置
- 迁移前数据库配置
- 迁移后数据库配置
很明显,迁移后数据库600s就关闭数据库的连接池了。而Django这边是3600s才会关闭数据库连接池,两边关闭时间不一致。
由于数据库是好几个团队共用,把应用的CONN_MAX_AGE改成600以下的数字,如改成CONN_MAX_AGE为300s,重新发布部署,此问题没有再出现
总结
本以为迁移个数据库,不会有任何问题,没想到最后还是踩了个坑,后续进行此类操作,还是要先整体考虑下再操作,也做好应急预案。进击变更三板斧。
作者:MonLey_Lu
微信公众号:XmonLey
可以关注微信,然后到微信群交流,现在微信群基本潜水,偶尔闲聊工作招聘之类,有具体想交流的单聊微信吧
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。