通过MySQL Workbench连接到Amazon RDS实例,使用EC2实例。

28
在AWS中,我设置了一个带有Bastion主机的VPC。Bastion主机是一个具有公共地址的单个EC2实例,通过它可以SSH到VPC上的任何其他服务器。
我在VPC中创建了一个RDS MySQL实例,并希望使用MySQL Workbench连接到它。我已经按照这里所述的步骤进行了操作,但在“Step 6: Setting up remote SSH Configuration”中,它要求我“提供Amazon EC2实例的公共DNS”(即Bastion主机)。
然后,MySQL Workbench会检查该服务器上某些MySQL资源。但是,在我看来,这是不正确的,因为我提供了Bastion主机的地址,它没有安装MySQL。因此,“Check location of start/stop commands”和“Check MySQL configuration file”这两个检查将失败。
然后,我尝试使用RDS MySQL实例的端点地址,但没有成功(因为它位于私有子网中,因此不能公开寻址)。
似乎很多人都已经成功运行了这个,但我在这里做错了什么?
8个回答

38

我也曾经为类似的问题苦苦挣扎了几周,但几分钟前终于弄清楚了。

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

通过以上步骤,我成功连接了数据库。不过,我没有在我的设置中使用VPC。希望这有所帮助。祝你好运!


2
不幸的是(其实是幸运的),我不再需要处理这个问题,也不想花钱在RDS上检查它。但如果有人能告诉我这是否有效,我会接受答案。感谢您的回复@AndrewSmiley。 - iamyojimbo
你救了我一天!谢谢。 - Roy

13

由于您正在使用 VPC,因此应按以下方式配置它,以便仅从您的子网接受连接:

  1. 选择用于您的数据库实例的 VPC 安全组。
  2. 添加一个新规则,允许私有子网上所有 IP 地址通过端口 3306 进行连接。

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

  3. 使用 MySQL Workbench TCP/SSH 进行连接,它将会工作(请参照 AndrewSmiley 的答案)。


你能解释一下如何获得私有子网的IP地址吗? - t q
nm,这是根据安德鲁回答的“步骤1”创建实例所生成的私有IP。 - t q
2
使用我的EC2私有子网/32没有起作用,但是我的EC2私有子网/24可以。我在文档中没有看到这个,但我是新手。谢谢! - ScottyB

6

我建议使用SSH隧道:

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

2
如果您想真正使用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 Workbench SSH隧道也可以使用这两个安全组。

1

这是针对Ubuntu Mysql Workbench的。

您必须向与RDS相关联的安全组添加入站规则,以接受来自bastion/jump/任何实例(机器)端口3306的请求。该机器应具有与之关联的公共IP。

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

要测试连接性,请运行:

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

将 {username}、{password} 和主机名替换为您的凭据。

按照图片操作,您应该能够连接。

Pictorial representation of the details to be entered.


1
你可以创建一个SSH隧道进入Bastion主机(EC2实例),将端口从本地机器转发到远程RDS实例。
在mac/linux上,这是命令(对于Windows,请按照下面的链接中的说明操作):
ssh -L 3306:myinstance.123456789012.us-east-1.rds.amazonaws.com:3306  your_c2_ip

接下来,您可以使用以下设置连接到工作台:

  • 连接方法:标准TCP

  • 主机名:localhost

  • 端口3306

本文详细解释了该方法; https://userify.com/blog/howto-connect-mysql-ec2-ssh-tunnel-rds/


0

确保连接到 EC2 实例时使用 .PEM 文件。假设您已经正确设置了其他所有内容,这可能是问题所在。

上传公共 RSA 密钥将允许您通过终端 SSH 连接到堡垒机。但是,在使用 MySql Workbench 时,此密钥将无法使用。


0

这是解决我的问题的方法。在RDS仪表板上查看实例的安全组。单击此选项,它会带您到安全组页面。

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

完成后,我就能够连接到AWS RDS T2实例了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接