Ubuntu环境下AWS EC2远程MySQL服务器连接失败求助
已完成的配置操作
- 修改远程服务器
/etc/mysql/mysql.conf.d/mysqld.cnf中的bind-address为0.0.0.0 - 创建远程用户并授权:
CREATE USER 'username'@'%' IDENTIFIED BY 'password'; GRANT ALL ON mydb.* TO 'username'@'%'; - 执行
sudo service mysql restart重启MySQL服务 - 通过
sudo ufw allow 3306开放防火墙3306端口 - 尝试配置
sshd: <IP_addresses_to_whitelist>并执行sudo service ssh restart重启SSH服务
问题现象
本地Ubuntu机器及其他EC2实例均无法连接,执行telnet 13.127.232.87 3306超时。远程MySQL服务运行正常,日志无错误,仅输出:
Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel. 2023-05-21T07:18:42.452577Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '127.0.0.1' port: 33060, socket: /var/run/mysqld/mysqlx.sock 2023-05-21T07:18:42.452831Z 0 [System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections. Version: '8.0.33-0ubuntu0.22.04.2' socket: '/var/run/mysqld/mysqld.sock'
排查与解决建议
检查AWS安全组规则
登录AWS控制台,找到目标EC2实例所属的安全组,添加入站规则:允许3306端口的流量来源(可暂时设为0.0.0.0/0测试,后续再限制特定IP)。EC2安全组优先级高于系统防火墙,即使UFW开放端口,安全组不允许仍无法连接。确认MySQL监听状态
在EC2实例上执行netstat -tulpn | grep mysqld,确认mysqld是否监听0.0.0.0:3306。若显示127.0.0.1:3306,说明配置未生效:检查是否有其他配置文件(如/etc/mysql/my.cnf)覆盖了bind-address,或用journalctl -u mysql.service查看重启时的详细日志。验证用户权限
登录MySQL执行SELECT user, host FROM mysql.user;,确认username对应的host为%。执行FLUSH PRIVILEGES;确保权限生效后重试连接。本地连接测试
在EC2实例本地执行mysql -u username -p -h 13.127.232.87,若能连接,说明MySQL配置和用户无问题,故障在网络层面(安全组/路由);若本地也无法连接,重点排查MySQL配置与权限。系统防火墙验证
执行sudo ufw status确认3306端口规则生效,或暂时关闭UFW(sudo ufw disable)测试连接,排除系统防火墙的干扰。
内容的提问来源于stack exchange,提问作者NACHIKETA CHAKRABORTY

