MySQL无法连接PythonAnywhere的Django网站,报1045权限错误
错误日志:
django.db.utils.OperationalError: (1045, "Access denied for user '<myusername>'@'10.0.0.116' (using password: YES)")
Django数据库配置:
DATABASES = { "default": { 'ENGINE': 'django.db.backends.mysql', 'NAME': '<myusername>$<mydatabasename>', 'USER': '<myusername>', 'PASSWORD': password, # 从其他文件导入的变量 'HOST': '<myusername>.mysql.pythonanywhere-services.com', } }
排查步骤:
检查MySQL用户的数据库权限
1045错误本质是MySQL拒绝了访问请求,和端口无关(已经建立连接才会返回该错误)。登录PythonAnywhere的MySQL控制台,执行命令查看用户权限:SHOW GRANTS FOR '<myusername>'@'%';确保结果包含对
<myusername>$<mydatabasename>数据库的ALL PRIVILEGES权限,且允许的主机包含%或错误日志里的10.0.0.116。如果权限不足,在PythonAnywhere数据库管理页面重新授权。核对数据库名格式
PythonAnywhere的MySQL数据库名必须严格遵循<用户名>$<数据库名>格式,注意是美元符号$,不能用其他符号。检查配置里的NAME值是否和控制台显示的数据库名完全一致(Linux下MySQL库名区分大小写)。直接验证数据库连接
抛开Django,在PythonAnywhere的Bash控制台用MySQL命令行测试连接:mysql -u <myusername> -h <myusername>.mysql.pythonanywhere-services.com -p <myusername>$<mydatabasename>输入密码后如果能进入MySQL,说明用户名、密码、数据库名正确,问题出在Django配置加载;如果连不上,就是MySQL端的权限或密码问题,优先解决这个。
确认Django加载的配置正确
可能存在加载错误settings文件的情况(比如开发/生产配置混淆)。在PythonAnywhere的Web控制台运行以下代码,查看实际生效的配置:from django.conf import settings print(settings.DATABASES['default'])检查输出的
USER、NAME、PASSWORD是否符合预期,重点确认密码是否正确加载。排查密码特殊字符问题
若密码包含@、#、$等特殊字符,直接写在Python字符串里可能需要转义,或确认导入变量时未被截断。可以先改用纯字母数字的简单密码测试,看是否能连接成功。
内容的提问来源于stack exchange,提问作者Henbeast

