You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django迁移至SSL加密MySQL后无法连接,SSL配置不生效排查

核心问题定位

你当前的配置最明显的错误是OPTIONS配置层级错误:OPTIONS必须放在对应数据库(此处为default)的配置字典内部,你现在把OPTIONS和default平级放置,Django完全读取不到SSL相关配置,自然不会生效。

正确的配置示例如下:

DATABASES = {
    "default": {
        "ENGINE": 'django.db.backends.mysql',
        "NAME": env("DATABASE_NAME"),
        "USER": env("DATABASE_USER"),
        "PASSWORD": env("DATABASE_PASSWORD"),
        "HOST": env("DATABASE_HOST"),
        "PORT": env.int("DATABASE_PORT"),
        "CONN_MAX_AGE": env.int("DATABASE_CONN_MAX_AGE", default=0),
        # OPTIONS必须放在default对应的字典内部
        "OPTIONS": {
            # 注意MySQL驱动的连接超时参数为connect_timeout,不是timeout
            "connect_timeout": env.int("DATABASE_CONN_TIMEOUT", default=60),
            "ssl": {
                "ca": CA_ROOT_PATH
            }
        }
    }
}
后续排查方向
  • 配置修正后再次执行python3 manage.py dbshell,查看输出的mysql命令是否已经携带了--ssl-ca相关参数,确认配置被正常读取
  • 手动构造带SSL参数的mysql命令测试连通性,排除证书、数据库侧配置问题:
    mysql --user=${DATABASE_USER} --password=${DATABASE_PASSWORD} --host=${DATABASE_HOST} --port=${DATABASE_PORT} --ssl-ca=${CA_ROOT_PATH} ${DATABASE_NAME}
    
    如果手动执行也报错,优先排查:
    • CA证书文件是否真实存在,运行Django的进程是否有该文件的读取权限
    • 数据库端是否强制开启SSL,是否配置了正确的CA证书,是否允许当前客户端IP通过SSL连接
  • 确认依赖版本匹配:
    • 若使用pymysql作为驱动,需确保版本≥0.10.0,且已正确配置pymysql.install_as_MySQLdb()
    • 若使用mysqlclient作为驱动,需确保版本≥2.0.3
    • Django版本建议≥3.2,低版本对MySQL SSL配置的处理存在已知问题

内容的提问来源于stack exchange,提问作者Steven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 13:06:05