如何从本地Spring应用连接Azure虚拟网络内的MySQL数据库
本地Spring应用连接Azure VNet内MySQL的解决方案
因为你的MySQL数据库仅允许Azure虚拟网络内的资源访问,要让本地Spring应用连上,核心是把本地机器接入Azure VNet的网络环境,下面是几种实用的实现方式:
方法一:点到站点(P2S)VPN连接(长期访问首选)
这是最常用的方案,相当于把本地机器“拉进”Azure VNet,之后就能直接访问VNet内的MySQL:
- 在Azure门户创建VPN网关,关联到目标VNet,选择支持点到站点的SKU(比如VpnGw1)
- 配置点到站点VPN:选择客户端协议(推荐IKEv2或OpenVPN),添加客户端地址池(比如192.168.10.0/24,不要和本地网段冲突)
- 下载VPN客户端配置文件,在本地机器安装并连接到Azure VPN
- 验证连通性:用
telnet <mysql私有IP> 3306或nc -zv <mysql私有IP> 3306测试,能通就说明网络没问题 - 修改Spring应用的数据库配置:
spring.datasource.url=jdbc:mysql://<mysql私有IP>:3306/你的数据库名?useSSL=true&serverTimezone=UTC spring.datasource.username=你的用户名 spring.datasource.password=你的密码
方法二:Azure Bastion端口转发(临时访问首选)
如果只是临时调试,不想搭建VPN,用Bastion做端口转发更快捷:
- 确保目标VNet已经部署了Azure Bastion服务
- 用Azure CLI执行端口转发命令(也可以在Azure门户操作):
az network bastion tunnel --name 你的Bastion名称 --resource-group 资源组名称 --target-resource-id MySQL的资源ID --port 3306 --local-port 3306 - 命令执行后,本地的
localhost:3306会映射到MySQL的3306端口 - Spring应用配置直接指向本地端口:
spring.datasource.url=jdbc:mysql://localhost:3306/你的数据库名?useSSL=true&serverTimezone=UTC
方法三:Private Endpoint + 本地DNS解析(适合生产级长期访问)
如果你的MySQL配置了Private Endpoint(推荐生产环境用),需要让本地能解析Private Endpoint的域名:
- 获取MySQL Private Endpoint的私有IP和FQDN(完全限定域名)
- 临时方案:在本地机器的
hosts文件(Windows是C:\Windows\System32\drivers\etc\hosts,Linux/macOS是/etc/hosts)添加一行:<Private Endpoint私有IP> <MySQL的FQDN> - 长期方案:配置Azure DNS私有区域,将本地DNS服务器与Azure DNS私有区域关联(需要通过VPN或ExpressRoute打通本地和Azure的DNS解析),之后本地就能自动解析Private Endpoint的域名
注意事项
- 确认MySQL的VNet防火墙规则已经允许对应VNet子网的流量(如果用P2S VPN,要允许VPN客户端地址池的网段)
- 本地机器的防火墙要允许 outbound 到3306端口的流量
- Spring应用的MySQL驱动版本要与数据库版本兼容,避免连接报错
内容的提问来源于stack exchange,提问作者Nikolay Boychev
相关产品推荐
相关产品推荐

