我无法从我的 EC2 实例连接到我的 RDS 实例。我将 EC2 实例的弹性 IP 地址添加到 RDS 安全组。如下所示:xx.xxx.xx/32
我正在使用 PHP 脚本来测试连接。
我将我的本地 IP 地址添加到 RDS 安全组,如下所示:xx.xxx.xx/32,并使用相同的脚本(在我的 MAC 上本地运行),我可以从本地 PC 连接到它()。
这是我用来测试的脚本:
<?php
$db_host = 'xxxxxxxxxx'; //this is the RDS endpoint, not the IP address
$db_user = 'xxxxxx';
$db_password = 'xxxxxx';
$db_name = 'xxxxxxx';
$mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
echo 'Server Info = '.$mysqli->server_info.'<br />';
echo 'Server Version = '.$mysqli->server_version.'<br />';
echo 'Connect Error = '.$mysqli->connect_error.'<br />';
?>
当我从我的 EC2 实例运行它时,我得到以下结果:
Server Info =
Server Version =
Connect Error = Unknown MySQL server host 'xxxxxxxx' (20)
当我从本地机器(Mac)运行它时,我得到以下信息:
Server Info = 5.5.27-log
Server Version = 50527
Connect Error =
有任何想法吗?
答案1
我无法从我的 EC2 实例连接到我的 RDS 实例。我将 EC2 实例的弹性 IP 地址添加到 RDS 安全组。如下所示:xx.xxx.xx/32
您的 EC2 实例可能正在使用其内部的IP 而不是(外部)弹性 IP。请记住,您可以授权安全组而不是 IP 地址 - 这可能是更好的解决方案。
答案2
当您使用“Endpoint”DNS 名称时。在 EC2 内部使用时,它将解析为内部 IP,在外部使用时,它将解析为公共 IP。您永远不应在安全组或主机配置中使用实际 IP 地址。
您的 EC2 实例正在尝试从内部 IP 连接,因此您的安全入站/出站规则阻止了它。
您应该更改您的安全组以接受来自彼此的流量安全组。这是 AWS 安全组的一项功能,只需输入 sg-* 而不是 CIDR,它就会显示所有选项。
例如:
Type Protocol Port Range Source
All traffic All All sg-**** (default)