业务系统 django 应用报错 MySQL Connection not available 问题处理

背景

业务系统切换数据后,频繁出现 MySQL Connection not available 错误异常,出现频率不确定,出现问题的接口也随机出现,搜索日志系统,问题出现在切换数据库之后,问题截图如下
部分日志截图

定位方向

开始时怀疑是请求增多导致数据库连接不足出现了异常,分析错误路径,找到出错最频繁的接口,压测此接口,无法复现问题;
继续看出错此问题前后应用代码修改情况,无新增代码,开始往切换了数据库方向定位;

DATABASES = {
    'default': {
        'ENGINE': 'mysql.connector.django',
        ****
        'CONN_MAX_AGE': 3600,
        *****
    },
}

数据库驱动这边使用了mysql官方驱动

参数 CONN_MAX_AGE 这里设置的是3600,查看官方手册,此函数定义
CONN_MAX_AGE参数定义
参数影响

很明显是用来持久化管理数据库连接的。

查看迁移前后,mysql数据库的数据库连接超时管理设置

  • 迁移前数据库配置
    迁移前数据库超时配置
  • 迁移后数据库配置
    迁移后数据库配置

很明显,迁移后数据库600s就关闭数据库的连接池了。而Django这边是3600s才会关闭数据库连接池,两边关闭时间不一致。

由于数据库是好几个团队共用,把应用的CONN_MAX_AGE改成600以下的数字,如改成CONN_MAX_AGE为300s,重新发布部署,此问题没有再出现

总结

本以为迁移个数据库,不会有任何问题,没想到最后还是踩了个坑,后续进行此类操作,还是要先整体考虑下再操作,也做好应急预案。进击变更三板斧。

posted on 2022-03-03 22:30  MonLey  阅读(557)  评论(0编辑  收藏  举报

导航