• 业务系统 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,重新发布部署,此问题没有再出现

    总结

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

  • 相关阅读:
    JPEG/PNG/GIF图片格式简析
    js-JavaScript常见的创建对象的几种方式
    js-ES6学习笔记-let命令
    js-权威指南学习笔记21
    js-jQuery性能优化(二)
    【读书笔记】iOS-Apple的移动设备硬件
    【读书笔记】iOS-属性中的内存管理参数
    【读书笔记】iOS-自动释放池
    【读书笔记】iOS-分类与协议
    【读书笔记】iOS-动态类型和动态绑定
  • 原文地址:https://www.cnblogs.com/monley/p/15962243.html
Copyright © 2020-2023  润新知