当我尝试从 ec2 服务器连接 amazon rds 服务器时出现错误 2003(HY000)

当我尝试从 ec2 服务器连接 amazon rds 服务器时出现错误 2003(HY000)

我知道我需要配置 RDS 安全组以允许来自 EC2 安全组的连接。

我有一个在默认安全组中运行的 EC2 实例。因此我将 EC2 安全组添加到 RDS DB 安全组。当我尝试使用 mysql 客户端从我的 EC2 实例进行连接时,它给出了以下错误:

ERROR 2003 (HY000): Can't connect to MySQL server on 'xxxx.xxxx.us-east-1.rds.amazonaws.com' (110)

我使用的命令是:

mysql -udbuser -p -hxxxx.xxxx.us-east-1.rds.amazonaws.com

我发现这个帖子和我遇到的问题一模一样,但没人回答

https://forums.aws.amazon.com/message.jspa?messageID=328603

我可以添加 CIDR/IP 规则,并且在我的笔记本电脑上工作正常。但是,我真的需要将我的 ec2 实例与我的 rds 连接起来。在此先感谢您的帮助。

答案1

我已通过将我的 EC2 服务器的公共 IP 地址添加到 DB 安全组默认策略来解决此问题。

答案2

为了扩展 Yuzhou 的答案,并回答 Amit 的问题,你可以创建新的安全组使用您的 EC2 实例的相应 IP 范围/子网。您可以使用确切的 IP,或使用您的 VPC 的子网作为范围。

创建后,您可以在管理控制台中右键单击您的 RDS 实例并选择“修改”。从那里,您可以更改关联的安全组。

答案3

Yuzhou Zhu 给出的答案是可行的,但更好的选择是将 EC2 实例的安全组添加到 RDS 数据库的安全组。在这种情况下,即使您不使用弹性 IP,在停止/启动 EC2(这可能会更改实例的公共 IP)后,您的解决方案仍将有效。

答案4

要扩展 mok 的答案,您需要指定将传入请求发送到 RDS 的源客户端> 源可以以安全组或 IP 的形式指定。就我而言,在开发过程中,我希望允许从任何地方访问,以便我可以从笔记本电脑进行故障排除。在发布生产之前,我将源更改为与 EC2 实例关联的安全组。之前我完全省略了源,因此我的 RDS 安全组无法创建,尽管是悄无声息的,这让问题更加神秘。以下是我的 CloudFormation 模板中的相关代码片段,

MyDatabaseSecurityGroup:
    DependsOn: [MyVpc]
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Security group for Amazon RDS cluster
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: 3306
          ToPort: 3306
          # TODO: After development phase completes, restrict access from EC2 only
          #       as opposed to the entire world by uncommenting below line
          #       and commenting out the one after it
          #SourceSecurityGroupId: !Ref MyWebSecurityGroup
          CidrIp: 0.0.0.0/0
      VpcId: !Ref MyVpc

相关内容