如何解决Django项目连接Azure MySQL数据库超时问题
Django连接Azure MySQL超时问题排查与解决
RuntimeWarning: Got an error checking a consistent migration history performed for database connection 'default': (2003, "Can't connect to MySQL server on 'dummyserver.database.windows.net' (timed out)")
针对你遇到的问题,按以下步骤排查:
检查Azure MySQL防火墙规则
登录Azure Portal,找到你的MySQL服务器,进入“连接安全性”页面:- 添加当前本地机器的公网IP到防火墙规则中;如果是动态IP,可临时添加
0.0.0.0/0测试(生产环境禁用此配置)。 - 确认“允许Azure服务和资源访问此服务器”选项已开启,部分场景下需要同时配置此选项和本地IP规则。
- 添加当前本地机器的公网IP到防火墙规则中;如果是动态IP,可临时添加
验证Django数据库配置细节
确保settings.py中的DATABASES配置符合Azure MySQL要求:HOST必须是完整的Azure服务器域名(如dummyserver.database.windows.net)。PORT保持默认的3306。USER格式为<用户名>@<服务器名>,Azure MySQL强制要求此前缀格式。- 若密码含特殊字符,用原始字符串
r""包裹避免转义问题。
示例配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '你的数据库名', 'HOST': 'dummyserver.database.windows.net', 'PORT': 3306, 'USER': 'your-user@dummyserver', 'PASSWORD': r'your-complex-password', 'OPTIONS': { 'ssl': {'ca': '/本地路径/DigiCertGlobalRootG2.crt.pem'}, }, } }确认SSL连接配置
Azure MySQL强制要求SSL连接,需从Azure Portal下载官方CA证书(DigiCertGlobalRootG2.crt.pem),并在OPTIONS中指定证书路径。
可先用命令行测试连接:mysql -h dummyserver.database.windows.net -u your-user@dummyserver -p --ssl-mode=REQUIRED --ssl-ca=/本地路径/ca-cert.pem若命令行能正常连接,说明Django的SSL配置存在疏漏。
排查本地网络限制
- 检查本地防火墙是否拦截了3306端口的出站请求,临时关闭防火墙测试。
- 切换网络(如手机热点),排除本地运营商或路由器对3306端口的限制。
规范迁移命令执行
- 执行迁移前,先运行
python manage.py check验证配置语法是否正确。 - 若使用多环境配置,需指定对应settings文件:
python manage.py migrate --settings=你的项目名.settings.production
- 执行迁移前,先运行
内容的提问来源于stack exchange,提问作者Jim Larry
相关产品推荐
相关产品推荐

