.NET Core 3.1部署Azure App Service后无法连接Azure MySQL 5.7排查
问题解答
背景
基于.NET Core 3.1的ASP.NET MVC项目,已部署至Azure App Service,数据库使用Azure MySQL 5.7服务器。本地通过WorkBench配置SSL(启用SSL并附加证书)可正常连接运行,但发布到Azure App Service后无法连接数据库。
使用的依赖库:
- MySql.EntityFrameworkCore 3.1.X
- Microsoft.EntityFrameworkCore 3.1.X
- MySql-Connector-Net 8.0.X
连接字符串模板:"Server=.mysql.database.azure.com;Port=3306;Database=;Uid=;Pwd=;"
针对疑问的解答
1. Azure MySQL 5.7版本是否是问题根源?如何升级?
Azure MySQL 5.7已在2023年结束官方支持,属于退役版本,确实可能存在兼容性问题(尤其是与较新的连接器库、Azure平台更新的适配问题)。
- 若在Azure Portal的MySQL服务器概述页未找到升级选项,可能是实例属于旧部署模式或区域限制:
- 先检查服务器左侧菜单「设置」下的「升级」选项,部分符合条件的实例仍可直接升级到8.0;
- 若没有升级入口,可通过Azure支持工单申请协助升级,无需直接新建付费服务器;
- 若升级路径受阻,可使用Azure数据库迁移服务将数据迁移到新建的MySQL 8.0服务器,迁移过程可保证数据一致性,且8.0版本在Azure平台有完整支持。
2. Azure App Service的SSL证书配置问题
Azure App Service连接Azure MySQL时,无需手动上传或配置SSL证书——Azure环境已内置信任Azure MySQL的根证书(DigiCert Global Root CA),只需确保以下两点:
- 连接字符串中添加
SslMode=Required参数,强制启用SSL连接,完整连接字符串示例:"Server=xxx.mysql.database.azure.com;Port=3306;Database=xxx;Uid=xxx@xxx;Pwd=xxx;SslMode=Required" - 确认Azure MySQL服务器的「连接安全性」设置中,已开启「强制启用SSL连接」。
若确实需要指定证书路径(极少场景),可将根证书文件放到项目的wwwroot目录,发布后使用相对路径指定,例如:SslCa=./wwwroot/DigiCertGlobalRootCA.crt.pem,但此操作并非必要。
3. 其他可能的故障原因
- 防火墙规则限制:检查Azure MySQL服务器的「连接安全性」,确认已勾选「允许Azure服务和资源访问此服务器」,或手动添加App Service的出站IP(可在App Service「属性」页查看完整出站IP列表);
- 连接字符串配置错误:发布到Azure后,需在App Service的「配置」-「连接字符串」中正确配置,避免硬编码在代码中(硬编码可能因环境变量覆盖、敏感信息泄露导致失效),同时确保
Uid格式为用户名@服务器名称(例如admin@myserver); - 库版本兼容性:MySql.EntityFrameworkCore 3.1.X需与对应版本的MySqlConnector匹配(如MySql.EntityFrameworkCore 3.1.18对应MySqlConnector 8.0.26),版本不匹配可能引发连接异常;
- 连接超时:Azure内部网络延迟可能导致连接超时,可在连接字符串中添加
Connection Timeout=30(或更长时间)测试; - 环境变量加载问题:确保代码中通过
Configuration.GetConnectionString("连接字符串名称")读取配置,而非直接硬编码,避免环境配置未正确加载。
内容的提问来源于stack exchange,提问作者Jems Chaudhary
相关产品推荐
相关产品推荐

