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

如何解决Django连接Heroku部署的MySQL时出现1044访问拒绝报错

报错1044的核心成因
  • 最常见的是ClearDB自动生成的数据库名称填写错误:Heroku上的ClearDB附加组件会自动生成完整的数据库名、用户名、密码,很多用户会误以为数据库名可以自定义,直接填了自己命名的名称,和实际ClearDB分配的不一致就会触发权限报错
  • 用户名/密码填写错误:复制配置参数时多带了首尾空格、或者混淆了不同环境的数据库账号信息
  • 账号权限不足:ClearDB免费版的账号默认只有对应分配数据库的权限,如果你手动指定了其他未授权的数据库名也会触发该报错
  • Heroku配置变量没有同步:如果你没有直接写死配置在settings.py,而是通过os.getenv读取Heroku的config vars,可能是变量没有正确配置到Heroku应用后台
排查步骤
  • 首先获取ClearDB官方分配的正确参数:进入Heroku后台对应应用的「设置」页面,点击「显示配置变量」,找到CLEARDB_DATABASE_URL配置项,它的格式为mysql://<用户名>:<密码>@<主机地址>/<数据库名>?reconnect=true,逐个拆分参数和你settings.py里的配置做比对
  • 本地直接测试数据库连接:使用本地MySQL客户端执行命令mysql -h eu-cdbr-west-01.cleardb.com -u <替换为你的用户名> -p<替换为你的密码> <替换为你的数据库名>,如果本地都无法连接,说明参数填写错误,和Django配置无关
  • 检查settings.py配置项有没有多余的空格、大小写错误,尤其是NAME、USER、PASSWORD三个参数不要带任何多余的引号、转义字符
解决方案
  • 完全按照CLEARDB_DATABASE_URL拆分出来的参数替换settings.py里的对应值,不要自行填写任何自定义的数据库名、用户名
  • 如果需要更安全的配置方式,可以直接解析环境变量自动生成配置,示例代码如下:
import os
import urllib.parse

urllib.parse.uses_netloc.append('mysql')
url = urllib.parse.urlparse(os.environ.get('CLEARDB_DATABASE_URL'))

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': url.path[1:],
        'USER': url.username,
        'PASSWORD': url.password,
        'HOST': url.hostname,
        'PORT': url.port,
    }
}
  • 如果确认所有参数正确仍报错,可尝试删除现有ClearDB附加组件后重新附加,生成新的数据库配置后再次尝试连接,免费版超出使用限制可能会被临时回收账号权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 00:15:00