You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL修改bind-address为私网IP后3306端口显示关闭如何解决

问题根因

Digital Ocean Droplet与GCE的网络架构逻辑存在差异:DO的公网IP、私网IP分别绑定在两块独立的虚拟网卡上,公网IP对应公网网卡(默认名为eth0),私网IP对应内网网卡(默认名为eth1)。
你之前在GCE环境中绑定私网IP即可同时连通公网、内网,是因为GCE默认配置了公网到私网网卡的DNAT转发规则,公网流入的请求会被自动转发到私网网卡处理;但DO没有这个默认配置,当你将bind-address仅设置为私网IP时,MySQL只会在内网网卡上监听3306端口,公网网卡的3306端口无进程监听,外部端口检测自然会显示端口关闭。而设置为0.0.0.0时MySQL会监听所有网卡的IPv4地址,所以公网、内网都能正常访问。

解决方案

根据你需要同时满足Workbench访问、跨服务器私网复制的需求,推荐两种配置方式:

方案1:安全优先(推荐)

如果你的Workbench是通过SSH隧道连接数据库(也是官方推荐的访问方式,可避免数据库直接暴露公网),直接在配置中同时绑定本地回环地址和私网IP即可,MySQL 8.0及以上版本支持逗号分隔多绑定地址:
修改my.cnf配置:

port = 3306
bind-address = 127.0.0.1,你的Droplet私网IP
# 若需要支持IPv6私网访问可追加::1

保存后重启MySQL服务生效:

systemctl restart mysql

该配置下:

  • 本地SSH隧道可通过127.0.0.1正常连接数据库
  • 同私域内的其他Droplet可通过私网IP连接,满足主从复制需求
  • 公网网卡不监听3306端口,从根源避免公网扫描、爆破数据库的风险

方案2:需要公网直连数据库

如果必须通过公网IP直连(不推荐,存在较高安全风险),可直接将bind-address设置为0.0.0.0,同时做好两层访问控制:

  • 权限控制:不要创建'adam'@'%'这类通配符用户,针对每个访问来源单独创建授权用户:Workbench访问创建来源为你本地公网出口IP的用户,主从复制创建来源为从库私网IP的复制专用用户
  • 防火墙控制:在DO云防火墙、ufw中,将3306端口的入站源严格限制为你本地公网IP、所有从库的私网IP,禁止开放0.0.0.0/0的全网访问权限。
配置校验

配置完成后执行以下命令确认监听状态是否符合预期:

ss -tulpn | grep mysqld

输出结果中能看到对应IP的3306端口处于LISTEN状态即为配置生效。

注意:你之前在GCE环境中创建的'adam'@'10.223.0.1'用户,仅允许IP为10.223.0.1的客户端连接,在DO环境中公网访问时MySQL识别到的客户端来源IP是你本地的公网出口IP,该用户无法用于公网连接,需要根据实际访问来源重新创建对应用户。

内容的提问来源于stack exchange,提问作者Dharmeshkumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 05:51:27