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

Posted

技术标签:

【中文标题】使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例【英文标题】:Connecting to Amazon RDS instance through EC2 instance using MySQL Workbench 【发布时间】: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 实例的端点地址,但没有成功(因为它位于私有子网中,因此不可公开寻址)。

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

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

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

    选择您的数据库实例使用的 VPC 安全组

    添加新规则以允许来自您的私有子网的所有 ip 在端口上 3306

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

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

【讨论】:

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

我建议使用 SSH 隧道:

    为堡垒主机创建 putty 会话 在 Connection --> SSH --> Tunnels 下,指定源端口:3306,目标:yourRDSendpointname:3306 别忘了点击添加! 使用这些设置连接到堡垒主机 在 MySQL 工作台中添加一个新连接并将其指向您的 localhost 端口 3306(假设您没有在本地客户端计算机上的 3306 上运行任何东西) 输入您的 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 -uusername -ppassword -h ***-db-***.cmmaberpdqoc.***.rds.amazonaws.com -P 3306

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

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

【讨论】:

【参考方案7】:

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

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

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

【讨论】:

以上是关于使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例的主要内容,如果未能解决你的问题,请参考以下文章

使用MySQL Workbench连接到Amazon Aurora时出错

Mysql Workbench 将表和列转换为在 Linux (AWS -EC2) 中不起作用的小写

使用 MySQL Workbench 与 Amazon RDS MySQL 数据库的简单连接

无法通过 Workbench 连接到 RDS MySQL 数据库

使用 Workbench 迁移向导通过 ssh 将 MS SQL Server 数据库迁移到 MySQL

无法通过 Workbench 或 MS Access 更新 MySQL 视图中的数据