我无法从我的服务器访问我的 Amazon RDS MySQL 数据库。
我明白了:-
[Thu Sep 22 13:45:33 2011] [error] [client xx.xx.xx.xx] PHP Warning: mysqli::mysqli() [<a href='function.mysqli-mysqli'>fqli-mysqli</a>]: (HY000/2003): Can't connect to MySQL server on 'xxxx-1.rds.amazonaws.com' (110) xxx.php on line 22, referer: xxx**
我尝试通过服务器上的 cmdline 手动访问:-
mysql -h xxxx.rds.amazonaws.com -p --port=3306
然后我要求输入密码 - 我输入了密码,然后它挂了,并说
错误 2003 (HY000):无法连接到“xxxx.rds.amazonaws.com”上的 MySQL 服务器 (110)
这是与端口和/或防火墙相关的问题吗?如果是,我应该解决什么问题?
是不是因为我已经在这个盒子上的 3306 端口上运行了 mysql srvr?
答案1
可能的原因是 - 防火墙阻止了对端口 3306 的访问 - 数据库服务器未在默认端口(3306)上运行 - MySQL 守护进程配置为仅接受来自本地主机的连接,而不接受来自远程主机的连接。(可以通过“netstat -ntlp”进行测试)。
答案2
我认为你的 ec2 实例的安全组必须具有出站 {All TCP} 并选择目的地在任何地方或你的 ip
答案3
我在尝试连接到远程 mysql db 时遇到了同样的问题。
我通过打开数据库服务器上的防火墙以允许流量通过来修复此问题:
sudo ufw allow mysql
答案4
RDS 服务器不可公开访问。如果您尝试 ping 端点 URL,您将看到它返回一个私有 IP(数据库子网上的本地地址),而不是公共 IP。
由于您无法将弹性 IP 附加到 RDS(并且您不应该这样做,因为它会附加到网络接口而不是连接端点),因此您有两种访问 RDS 远程的选项。
A) 使用 SSH 隧道 B) 创建具有公共子网的 VPC 并使用网络地址转换将连接路由到私有子网。您应该通过弹性负载均衡器路由连接以避免单点故障。