如何从EC2 Ubuntu实例连接本地Windows的MySQL服务器?
解决从Ubuntu EC2实例连接本地Windows MySQL服务器的问题
问题描述
我本地有运行在Windows系统上的MySQL服务器,现尝试从Ubuntu EC2实例连接该数据库,却提示“无法连接到我的IP上的MySQL服务器(110连接错误)”
补充说明:我甚至无法从Ubuntu实例ping通本地IP
排查与解决步骤
既然连ping都不通,咱们先从最基础的网络层面排查,再处理MySQL的配置问题:
1. 确认本地公网IP与路由器端口转发
- 先搞清楚你本地Windows机器的公网IP(不是内网的
192.168.x.x这类),可以在Windows命令行敲curl ifconfig.me或者浏览器直接查公网IP。 - 登录家里的路由器管理后台,找到「端口映射」或「虚拟服务器」选项,把MySQL默认的
3306端口(如果改了自定义端口就用你设置的那个)转发到本地Windows机器的内网IP上,协议选择TCP(MySQL用TCP连接)。
2. 检查Windows防火墙设置
- 打开Windows Defender防火墙的「高级设置」,新建一条入站规则:允许TCP协议的
3306端口通过,测试阶段可以先允许所有外部IP访问,后续再限制为EC2实例的IP更安全。 - 也可以临时关闭Windows防火墙做测试,如果能ping通了,说明就是防火墙拦截了,再重新配置规则就行。
3. 修改MySQL的绑定地址
- 找到Windows上MySQL的配置文件(一般在
C:\ProgramData\MySQL\MySQL Server 8.0\my.ini,具体路径看你的安装版本)。 - 找到
bind-address这一行,把它改成0.0.0.0(允许所有IP访问),或者直接注释掉该行(部分版本默认是注释状态)。 - 修改完成后,在Windows服务里找到MySQL服务,右键重启生效。
4. 授权MySQL用户远程访问权限
- 登录本地MySQL控制台(命令行敲
mysql -u root -p,输入密码进入),执行以下SQL语句授权用户远程访问:
要是想更安全,就把GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码'; FLUSH PRIVILEGES;%换成你的EC2实例公网IP,只允许这个IP访问。
5. 测试连通性
- 在Ubuntu EC2上先测试ping本地公网IP:
ping 你的公网IP,能通了再测端口开放情况,用nc -zv 你的公网IP 3306(没装nc的话先敲sudo apt install netcat)。 - 端口连通后,尝试连接MySQL:
mysql -h 你的公网IP -u 你的用户名 -p,输入密码看能不能成功登录。
额外提醒
- 有些运营商会屏蔽
3306这类默认端口,如果以上步骤都没用,可以试试把MySQL端口改成3307这类非默认端口,同步修改路由器转发和防火墙规则。 - 如果你的本地网络是NAT444类型(部分运营商会用),公网IP无法直接被外部访问,这种情况可以试试内网穿透工具(比如frp)来实现连接。
内容的提问来源于stack exchange,提问作者user9428418
相关产品推荐
相关产品推荐

