从 EC2 实例连接到新的 RDS 实例

从 EC2 实例连接到新的 RDS 实例

我无法从我的 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)

相关内容