【问题标题】:Connecting to Amazon RDS instance through EC2 instance using MySQL Workbench使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例
【发布时间】:2013-10-08 09:28:11
【问题描述】:

在 AWS 中,我设置了一个带有堡垒主机的 VPC。堡垒主机是具有公共地址槽的单个 EC2 实例,您可以通过该地址 SSH 连接到 VPC 上的任何其他服务器。

我在 VPC 中创建了一个 RDS MySQL 实例,我想使用 MySQL 工作台连接到它。我已经按照here 详述的步骤进行操作,但是在“第 6 步:设置远程 SSH 配置”中,它要求我“提供 Amazon EC2 实例的公共 DNS”(即堡垒主机)。

然后,MySQL 工作台会检查该服务器上的某些 MySQL 资源。但是,我认为这是不正确的,因为我提供了堡垒主机的地址,而该地址没有安装 MySQL。结果,最后两次检查“检查启动/停止命令的位置”和“检查 MySQL 配置文件”然后失败。

然后我尝试使用 RDS MySQL 实例的端点地址,但没有成功(因为它位于私有子网中,因此不可公开寻址)。

似乎很多人都在运行它,但是我在这里做错了什么?

【问题讨论】:

    标签: mysql amazon-web-services ssh amazon-rds amazon-vpc


    【解决方案1】:

    几周以来,我一直在为类似的事情苦苦挣扎。几分钟前才想通。

    1. 在 mysql 工作台中,创建一个新的服务器实例。
    2. 对于远程主机地址,输入您的端点地址(即 xxxxxx.us-east-1.rds.amazonaws.com)
    3. 对于连接方法,选择“标准 TCP/IP over SSH”
    4. SSH 主机名是您的 EC2 实例的公共 DNS
    5. 我指定了 ec2-user(我相信它因 EC2 实例类型而异)作为用户名,然后指定了与实例使用的密钥对相对应的下载密钥文件。
    6. mysql 主机名是 RDS 实例的端点。
    7. 用户名是 RDS 实例的用户名(即 ebroot)

    使用我能够连接。但是,我没有在我的设置中使用 VPC。希望这可以帮助。祝你好运!

    【讨论】:

    • 很遗憾(其实也很庆幸)我不再需要处理这个问题,也不想花钱买RDS去检查。但是,如果有人可以告诉我这是有效的,我会接受答案。感谢您的回复@AndrewSmiley。
    • 你救了我一天!谢谢。
    【解决方案2】:

    由于您使用的是 VPC, 为了只接受来自您的子网的连接,应该这样配置它:

    1. 选择您的数据库实例使用的 VPC 安全组
    2. 添加新规则以允许来自您的私有子网的所有 ip 在端口上 3306

      例如:规则入站 3306 (MYSQL) 172.33.11.0/24

    3. 使用 mysql workbench tcp/ssh,它会工作(跟随 AndrewSmiley 回答)。

    【讨论】:

    • 你能解释一下如何获得这个吗? ips from your private sub-net
    • nm,这是您在step 1 上创建的实例的私有 IP,安德鲁的回答
    • 使用我的 ec2 私有子网/32 不起作用,但我的 ec2 私有子网/24 可以。我在文档中的任何地方都没有看到这个,但我是新手。谢谢!
    【解决方案3】:

    我建议使用 SSH 隧道:

    1. 为堡垒主机创建 putty 会话
    2. 在 Connection --> SSH --> Tunnels 下,指定源端口:3306,目标:yourRDSendpointname:3306
    3. 别忘了点击添加!
    4. 使用这些设置连接到堡垒主机
    5. 在 MySQL 工作台中添加一个新连接并将其指向您的 localhost 端口 3306(假设您没有在本地客户端计算机上的 3306 上运行任何东西)
    6. 输入您的 RDS 实例的用户名和密码

    【讨论】:

      【解决方案4】:

      如果您想真正使用 AWS 的 VPC 连接并且不允许公共 IP,请执行以下操作。

      如果您有一个同时分配了 EC2 和 RDS 的安全组,则在 TCP 上为 mysql 3306 添加入站规则,但在源字段中不要输入 IP 或子网,而是输入实际的安全组 ID。即 sg-9829f3d2。

      我个人在 VPC 上有两个安全组。

      首先,安全组 1 被 EC2 实例使用,只允许 EC2 所需的端口,即 80 和 22。

      第二个,安全组 2 仅由 RDS 实例使用,并且有一个允许 mysql (3302) 的规则,并且源字段设置为安全组 1 的 id。

      所有 Mysql 工作台 SSH 隧道也适用于这两个安全组。

      【讨论】:

        【解决方案5】:

        您可以在 Bastion 主机(EC2 实例)中创建一个 SSH 隧道,以将端口从本地机器转发到远程 RDS 实例。

        在 mac/linux 上,这是命令(对于 windows,请按照以下链接中的说明进行操作):

        ssh -L 3306:myinstance.123456789012.us-east-1.rds.amazonaws.com:3306  your_c2_ip
        

        然后您可以使用以下设置与工作台连接:

        • 连接方式:标准TCP

        • 主机名:本地主机

        • 端口 3306

        这篇文章更详细地解释了它的方法; https://userify.com/blog/howto-connect-mysql-ec2-ssh-tunnel-rds/

        【讨论】:

          【解决方案6】:

          这是用于 UBUNTU Mysql 工作台的

          您必须向与 RDS 链接的安全组添加入站规则,以接受来自堡垒/跳转/任何实例(机器)的端口 3306 上的请求。 这台机器应该有一个与之关联的公共 IP。

          在尝试通过 MYSQL 工作台设置 SSH 隧道之前,请先在您的机器上确认是否可以连接 RDS。

          测试连接运行:

          mysql -u{username} -p{password} -h ***-db-***.cmmaberpdqoc.***.rds.amazonaws.com -P 3306
          

          用您的凭据替换 {username}、{password} 和主机。

          按照图片,你应该可以连接。

          【讨论】:

            【解决方案7】:

            这就是为我解决问题的方法。在 RDS 仪表板上查看您的实例的安全组。单击它,它将带您进入安全组页面。

            虽然它会为入站和出站点击编辑显示“所有流量”,并确保来源显示“我的 IP”。我不建议使用所有 IP,因为这会向 Internet 上的任何人开放。如果您没有静态 IP,请确保在连接停止工作后刷新此字段。

            在此之后,我能够连接到 AWS RDS T2 实例。

            【讨论】:

              猜你喜欢
              • 2018-12-15
              • 2019-04-03
              • 2016-08-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-05-02
              • 1970-01-01
              • 2014-02-17
              相关资源
              最近更新 更多