AWS Plesk实例MySQL远程连接失败:3306端口显示关闭求排查方案
排查MySQL远程连接失败(3306端口显示关闭)的解决方案
针对你遇到的问题,以下是逐步排查的关键点:
1. 确认MySQL实际绑定的地址
你的/etc/mysql/my.cnf中注释了bind-address = 0.0.0.0,但注意部分MySQL/MariaDB版本默认会绑定127.0.0.1(仅本地访问),且你配置里包含了子目录的配置文件(!includedir),这些子文件可能覆盖主配置:
- 检查子配置文件,执行:
grep -r "bind-address" /etc/mysql/conf.d/ /etc/mysql/mariadb.conf.d/ - 如果输出显示
bind-address = 127.0.0.1,将其修改为bind-address = 0.0.0.0(允许所有IP访问)或指定你的EC2公网IP,然后重启MySQL服务:sudo systemctl restart mysql
2. 验证MySQL服务状态与监听端口
- 检查服务是否正常运行:
确保状态为sudo systemctl status mysqlactive (running),如果未启动,执行sudo systemctl start mysql。 - 确认MySQL实际监听的端口和地址:
正确输出应包含ss -tulpn | grep mysql0.0.0.0:3306或你的EC2公网IP:3306,如果显示127.0.0.1:3306,说明仍仅绑定本地,需回到第一步修正配置。
3. 检查EC2网络ACL配置
EC2安全组开放端口后,网络ACL(若自定义过)可能限制流量:
- 进入AWS控制台→EC2→你的实例→网络→查看所属的网络ACL
- 确保入站规则允许
0.0.0.0/0的TCP 3306端口,出站规则允许所有响应流量(或至少允许TCP 1024-65535端口的出站)。
4. 确认MySQL用户的远程访问权限
即使端口通了,用户没有远程权限也无法连接:
- 登录本地MySQL:
mysql -u root -p - 查询用户权限:
SELECT user, host FROM mysql.user; - 若目标用户的
host为localhost或特定内网IP,修改为允许远程访问:
(ALTER USER 'your_username'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;%表示允许任意远程IP,也可指定你的客户端IP)
5. 检查Plesk的额外限制
Plesk的"允许来自任意主机的远程连接"设置可能被其他规则覆盖:
- 进入Plesk→工具与设置→防火墙,确认是否添加了允许3306端口的规则,且未被其他拒绝规则优先级覆盖。
- 检查Plesk的MySQL管理界面,确认是否对用户设置了IP访问限制。
6. 验证服务器公网IP正确性
确保你执行nmap时使用的34.34.34.34是EC2实例的公网IP(而非内网IP),内网IP仅能在VPC内部访问。
内容的提问来源于stack exchange,提问作者FabricioG
相关产品推荐
相关产品推荐

