Azure Web App连接Azure MySQL专用连接仅1个可用问题排查
问题诊断与解决思路
核心原因推测
你遇到的「单连接限制」问题,大概率和以下几个配置细节有关:
1. PHP未启用持久化连接或连接池
如果你的PHP代码是每次请求都创建全新的数据库连接,切换到专用端点(单IP)后,Web App的TCP连接复用机制可能失效,导致所有请求的DB连接请求被串行处理,表现为同一时间只能有一个连接可用。
解决方法:
- 改用PDO持久化连接:在DSN中添加
persistent=1参数,修改后的连接URL为:mysql://user:password@10.1.1.4:3306/mydatabase?serverVersion=8.0.31&persistent=1 - 调整PHP配置:确保
pdo_mysql.max_persistent、pdo_mysql.max_links等参数设置合理(单实例可设为100左右,根据实例规格和预期并发量调整)。
2. 直接使用专用端点IP绕过负载均衡逻辑
专用端点本质是Azure托管的负载均衡器,默认通过DNS轮询分配后端连接。你直接指定静态IP(10.1.1.4)跳过DNS解析,会导致所有连接集中到单个后端节点,触发LB的单IP连接限制。
解决方法:
- 配置专用DNS区域:为Azure MySQL创建
privatelink.mysql.database.azure.com专用DNS区域,关联到Web App所在的VNet,让Web App通过数据库原始域名解析到专用端点IP。 - 恢复使用数据库域名连接:修改连接URL为原始域名,确保流量通过负载均衡分发:
mysql://user:password@your-db-name.mysql.database.azure.com:3306/mydatabase?serverVersion=8.0.31
3. VNet集成的子网或NSG配置异常
检查Web App集成的VNet子网与MySQL专用端点子网的网络规则:
- 确认NSG规则允许双向TCP 3306端口流量,且未手动设置并发连接数限制(NSG默认不限制并发)。
- 检查子网路由表:确保没有路由规则导致DB连接流量被节流或串行转发。
4. Azure MySQL服务器参数限制
虽然公网连接时正常,但切换专用端点后可能触发MySQL连接数限制:
- 登录Azure门户,进入MySQL服务器的「服务器参数」页面,检查
max_connections值是否匹配并发需求(General Purpose实例可设为1000以上)。 - 同步检查
wait_timeout和interactive_timeout参数,避免连接被过早回收。
验证步骤
- 先测试启用PDO持久化连接,观察并发查询是否恢复正常。
- 若问题依旧,配置专用DNS区域并改用域名连接。
- 最后排查VNet/NSG规则和MySQL服务器参数。
内容的提问来源于stack exchange,提问作者AQuirky
相关产品推荐
相关产品推荐

