Django使用域名代替硬编码IP连接远程SQL数据库失败无报错如何解决
Django数据库域名连接失败排查方案
- 第一步验证域名解析正确性
在Django服务部署的服务器上执行ping <替换为你的数据库域名>,确认解析结果和你之前使用的数据库IP一致。如果解析错误,可以先在服务器/etc/hosts(Linux)或C:\Windows\System32\drivers\etc\hosts(Windows)文件中手动绑定数据库IP和域名做临时验证,排除DNS解析故障。 - 第二步验证端口连通性
解析正常的前提下,执行telnet <你的数据库域名> 3306或nc -zv <你的数据库域名> 3306,确认3306端口可正常连通,排除防火墙、安全组拦截端口的问题。 - 第三步检查MySQL账号权限
MySQL用户的访问权限是和来源IP绑定的,登录数据库执行SELECT user,host FROM mysql.user WHERE user='root';,确认当前root用户允许的访问来源包含Django服务的出口IP。如果域名解析后的IP和之前硬编码IP阶段的Django出口IP有变化,需要重新给对应IP授权。 - 第四步调整日志级别查看详细报错
无错误提示一般是日志级别设置过高,在settings.py中添加以下配置开启DEBUG级别的日志输出:
重启Django服务后查看控制台输出的日志,即可定位具体的连接错误原因。LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'handlers': { 'console': { 'class': 'logging.StreamHandler', }, }, 'root': { 'handlers': ['console'], 'level': 'DEBUG', }, } - 第五步检查配置格式错误
确认DATABASES中的HOST配置仅填写纯域名,不要带http://、https://前缀或者末尾的斜杠,正确示例:'HOST': 'mysql.xxx.com'。 - 第六步跨工具验证连接
在Django服务所在的服务器上,使用mysql命令行工具、Navicat等客户端,用相同的域名、端口、账号密码尝试连接数据库,如果客户端也无法连接,说明问题和Django本身无关,优先排查网络、数据库侧配置问题。
内容的提问来源于stack exchange,提问作者BRL
相关产品推荐
相关产品推荐

