AWS Aurora MySQL 无服务器:如何从 MySQL Workbench 连接

Posted

技术标签:

【中文标题】AWS Aurora MySQL 无服务器:如何从 MySQL Workbench 连接【英文标题】:AWS Aurora MySQL serverless: how to connect from MySQL Workbench 【发布时间】:2019-01-13 22:31:51 【问题描述】:

我尝试在我的项目中使用 AWS Aurora Serverless for mysql,但我无法连接到它,尽管我有终端节点、用户名和密码。

我做了什么:

    从 AWS 控制台管理中,我选择 RDS > Instances > Aurora > Serverless 保留默认设置 创建数据库 AWS 只会创建一个 AWS 集群 我打开 MySQL Workbench,使用端点、用户名、密码连接数据库

结果:

您的主机与用户“admin”的连接尝试失败 服务器在 xxxxx.cluster-abcdefg1234.eu-west-1.rds.amazonaws.com:3306: 无法连接到 MySQL 服务器 'xxxxx.cluster-abcdefg1234.eu-west-1.rds.amazonaws.com' (60)

我做错了什么吗?请给我建议。

****编辑****

我尝试使用容量类型创建另一个 Aurora 数据库:预配置。我可以通过 MySql 工作台使用用户名和密码无缝连接到端点。表示为工作台开放了3306端口。

关于安全组:

【问题讨论】:

您有哪些安全组可以从运行 MySql Workbench 的任何位置开放对端口 3306 的访问? RDS 上安全组的一般信息:docs.aws.amazon.com/AmazonRDS/latest/UserGuide/… 我编辑了这个问题。我认为端口不是问题,因为我创建了另一个 Aurora MySql 数据库,其类型为:provisioned,并且运行顺畅。但是对于无服务器类型,它不起作用 你能在 3306 端口上远程登录到xxxxx.cluster-abcdefg1234.eu-west-1.rds.amazonaws.com 吗?如果可以-您知道这是配置/身份验证问题,否则,您有网络问题。根据您的操作系统,您可能需要安装 Telnet,然后发出类似telnet xxxxx.cluster-abcdefg1234.eu-west-1.rds.amazonaws.com 3306的命令 Aurora Serverless 似乎使用 Privatelink 接口 VPC 终端节点 (VPCE) 来实际提供 VPC 内部的终端节点,因此他们aren't accessible from elsewhere。你在哪里运行工作台? 您可以为 aurora serverless 设置一个可以从 vpc 外部访问的数据 api。有时间我会用mysql workbench试试这个。 【参考方案1】:

我的猜测是您的安全组未正确设置访问权限。您需要明确允许该端口对该实例的远程访问。

来自官方文档:

导致新数据库实例连接失败的两个常见原因是:

数据库实例是使用安全组创建的,该安全组不授权来自设备或 Amazon EC2 实例的连接,其中 MySQL 应用程序或实用程序正在运行。如果数据库实例是 在 VPC 中创建,它必须具有授权的 VPC 安全组 连接。如果数据库实例是在 VPC 之外创建的,则它 必须有一个授权连接的数据库安全组。

数据库实例是使用默认端口 3306 创建的,并且您的公司有防火墙规则阻止从 公司网络中的设备。要修复此故障,请重新创建 具有不同端口的实例。

查看这里了解更多信息:

https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_ConnectToInstance.html

【讨论】:

感谢您的建议,但事实并非如此(请参阅我的问题更新) AWS 只为 Aurora MySql 类型的 Serverless 创建了集群,根本没有实例。【参考方案2】:

连接到 Aurora Serverless 数据库集群的一种方法是使用 Amazon EC2 实例。你不能 在预览版中创建可公开访问的 Aurora Serverless 数据库集群。此任务将引导您完成 在您的 VPC 中创建可公开访问的 Amazon EC2 实例。您可以使用此 Amazon EC2 实例 连接到 Aurora Serverless 数据库集群。

这直接来自预览注册时提供的文档。请尝试在您选择的 MYSQL Workbench 或 SQL UI 中创建 EC2 实例并使用 SSH 隧道方法。在预览期间,不允许将 Aurora Serverless 设置为可公开访问。

【讨论】:

您好 cmtzco,如果是这样,目前还不是在正式发布之前使用 Aurora Serverless DB 进行生产的时候。我说的对吗? @PeterPham 是的,我建议您对其进行测试以备不时之需。不过,它看起来像是在 5 天前宣布供公众使用。 aws.amazon.com/blogs/aws/aurora-serverless-ga @cmtzco 隧道部分让我很困惑:***.com/questions/52448301/… @cmtzco 这里有一些非常明确的说明:aws.amazon.com/es/getting-started/tutorials/…【参考方案3】:

来自https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/aurora-serverless.html:

您不能为 Aurora Serverless 数据库集群提供公共 IP 地址。 您只能从一个 基于 Amazon VPC 服务的虚拟私有云 (VPC)。 您无法通过 AWS *** 连接或区域间 VPC 对等连接。那里 是通过 区域内 VPC 对等连接;有关详细信息,请参阅 Amazon VPC 用户中的接口 VPC 终端节点 (AWS PrivateLink) 指导。但是,您可以访问 Aurora Serverless 集群的 通过 AWS Direct Connect 连接的端点。

因此,除了通过 EC2 实例进行 SSH 连接之外,您还可以使用带有 AWS Direct Connect 的 mySQL Workbench 访问您的无服务器集群。

【讨论】:

目前看来,Serverless DB 也可以通过 AWS Client *** docs.aws.amazon.com/***/latest/client***-admin/…访问 @Yoga 您是否了解有关如何将 AWS Direct Connect 与 Aurora 结合使用的更多信息?谢谢。 Tailscale *** 设置反向 NAT,您可以将其部署在 EC2 实例上,然后按照this doc 中的步骤将其设置为子网中继。有了这个,我的团队已经能够设置(花了我们 30 分钟)并从 MySQL 工作台和 Sequel Pro 连接到 Aurora Serverless。希望能帮助到你。 :)【参考方案4】:

最初,我陷入了同样的境地 连接AWS RDS Aurora时的注意事项

无法连接公共,您需要一个与创建 Aurora 所在区域相同的 EC2 实例。

Aurora 公共访问应该勾选否(它对我有用)。

您需要创建安全组,您应该在其中添加入站和出站规则(EC2 实例的 IpAddress)。

例如:Type = MYSQL/AURORA、Protocol=TCP、PortRange=3306、Source=Custom 和您的 IP 地址范围,

将实例和安全组修改为实例并立即应用更改。

在创建 Aurora 时,您将创建 MasterName、Pwd 和要连接的默认架构。

创建后,转到集群并获取集群端点并使用您的 EC2 实例和 MySQL Workbench 登录,主机名作为您的集群端点,在创建极光数据库时输入用户名和密码。

李>

【讨论】:

他在询问 Aurora Serverless,它没有“可公开访问”选项【参考方案5】:

客户用于连接到仅限 VPC 的服务(如 Aurora Serverless、Amazon Neptune、Amazon DocDB 等)的常见模式是拥有一个中间层(EC2 实例或 ALB 等)并让中间层可以从外部访问专有网络。如果您的用例只是尝试一些查询或连接工作台,那么最简单的做法是:

    解析 serverless db 的 DNS 并获取其 IP 在您的 VPC 中创建一个 ALB,目标组指向您在 #1 中找到的 IP 创建一个新的安全组并将其附加到您的 ALB 更新 SG 以允许从任何您想要的地方入站。如果您想要公共互联网访问,则允许来自所有 IP 的入站,在您的 VPC 中启用互联网网关,并为您的 ALB 使用公共子网。

所有这些都完成后,您将获得一个新的 DNS - 指向您的 ALB。通过以下方式确保您的 ALB 设置正确:

    使用 telnet 连接到您的 ALB 端点。 telnet alb-endpoint alb-port。如果成功,那么您将拥有完整的端到端连接(不是连接到您的 ALB,而是一直连接)。 验证 ALB 指标以确保所有运行状况检查都通过。

完成后,在工作台中使用 ALB 端点,一切顺利。

此模式仅推荐用于非生产系统。相关的步骤是将 DNS 解析为 IP - 该 IP 是短暂的,当在后台发生规模计算或故障转移时,它可能会发生变化。

希望这会有所帮助,如果您需要有关任何步骤的更多详细信息,请告诉我。这是海王星的相关答案:

Connect to Neptune on AWS from local machine

【讨论】:

ALB 不适合此用例,因为 ALB 仅支持 HTTP/HTTPS 协议,但从 MySQL Workbench 连接到 Aurora 需要 MySQL 协议。 然后使用 NLB? 据我了解,NLB 也不适合,因为 Aurora 没有为目标提供 IP 地址或实例 ID。 @TakayukiSato 这就是 .但是IP地址可能会改变,所以它绝对是短期/开发解决方案【参考方案6】:

这可以使用haproxy来实现

在 Centos 上安装 Haproxy-> yum install haproxy

删除此文件 /etc/haproxy/haproxy.cfg 中的现有配置并添加以下行(确保在以下配置中替换您的 RDS 端点 url)

全球 用户代理 组代理

默认值 重试 2 超时连接 3000 超时服务器 5000 超时客户端 5000

监听 mysql-cluster 绑定 0.0.0.0:3307 模式 tcp 服务器 mysql-1 test.cluster-crkxsds.us-west-2.rds.amazonaws.com:3306

修改文件后,启动haproxy -> service haproxy start

您可以使用端口号为 3307 的公共 IP 在 MYSQL Workbench 中连接 Aurora RDS

【讨论】:

【参考方案7】:

用于连接 Aurora Serverless 的数据 API 和查询编辑器现已在更多区域推出。

https://aws.amazon.com/about-aws/whats-new/2020/05/amazon-rds-data-api-and-query-editor-available-additional-regions/

【讨论】:

MySQL Workbench 也不能使用 这很好用,但它不允许例如 mysqldump。【参考方案8】:

您应该使用可以访问您的 dbinstance 的 EC2 实例。 此 EC2 实例应为 ssh 打开端口 22。 现在使用从本地到 EC2 到数据库实例的端口转发。 现在在您的工作台上输入主机名 127.0.0.1 和端口 <forwarded port>

【讨论】:

【参考方案9】:

Aurora serverless 没有公共端点可以从任何 ide 连接,例如 MYSQL Workbench、Sequel pro 等。但是我们可以通过 cli 连接,方法是在 aurora serverless 所在的同一 vpc 中启动一个实例。

此外,您还可以查看 cloud9 和 aws cloud ide。这又只是 ec2,但也将具有 UI,并且可以与团队和许多其他功能共享。

【讨论】:

【参考方案10】:

我们不能直接从 MySQL Workbench 连接 Aurora Serverless,因为只有分配给 Aurora Serverless 的私有 IP,而不是公共 IP。

我们可以从 EC2 连接 Aurora Serverless,但无法通过 Mysql Workbench SSH 隧道连接 Aurora Serverless。

我们无法通过 ALB 连接 Aurora Serverless,因为 ALB 仅允许 HTTP 和 HTTPS 流量。 您可以从本地远程登录 ALB-RDS-DNS,但无法连接到 MySQL Workbench

那么这里有什么解决办法;

我们可以通过 NLB 连接 Aurora Serverless,因为 NLB 允许 TCP 协议上的流量;

步骤 1:创建 NLB 并添加监听负载均衡器协议:TCP 和负载均衡器端口 :3306

第2步:选择VPC(应该是Aurora Serverless Cluster的同一个VPC),并添加子网(公有)

第 3 步:导航到配置路由,选择目标类型:IP 和协议:TCP,端口:3306

第 4 步:使用 DNS Checker 获取 Aurora Serverless Cluster 的私有 IP,并将这些 IP 添加到端口 3306

第 5 步:创建 NLB

现在修改 Aurora Serverless Cluster 的安全组,允许来自 0.0.0.0(不推荐)或 VPC CIDR 的流量

现在,转到 Mysql Workbench 并使用 NLB DNS 名称,并尝试使用 Aurora Serverless Cluster 的正确用户名和密码进行连接。

【讨论】:

很好用!这样做的一个潜在缺点可能是 NLB 的运行状况检查将阻止 Aurora 实例完全关闭(如果这是相关的)。 第四步,如何获取我的极光无服务器集群的私有IP? @FernandoSantiago 您可以执行nslookup ****.rds.amazonaws.com 并将所有 IPv4 地址添加到 NLB 目标组。【参考方案11】:

要连接到 Aurora 无服务器或私有子网中的任何数据库,您需要一个“跳转主机”,它可以是公有子网中的任何 EC2 实例。

按照以下步骤操作:

    打开附加到数据库的安全组,并添加新规则如下:-

类型:MYSQL/Aurora,协议:TCP,端口范围:3306, 来源:securitygroupofEC2(您可以通过输入所有安全组 'sg-')

    打开附加在EC2上的安全组,并打开22端口。如果没有,请添加如下新规则:-

类型:SSH,协议:TCP,端口范围:22,来源:MY IP

    打开工作台,点击新建连接
- Standard TCP/IP over SSH
 - SSH Hostname : < your EC2 Public IP >  #34.3.3.1
 - SSH Username : < your username > #common ones are : ubuntu, ec2-user, admin
 - SSH KeyFile: < attach your EC2 .pem file>

 - MYSQL Hostname: <database endpoint name> #mydb.tbgvsblc6.eu-west-1.rds.amazonaws.com

 - MYSQL Port: 3306
 - Username : <database username>
 - Password: <database password>

单击“测试连接”并完成!

【讨论】:

如果有一些疑问,视频教程也是如此。 youtube.com/watch?v=qI4hlUrAkAU 这应该是公认的答案,可能是上面 Yoga 指出的 AWS 文档的链接。这样做可以让您快速启动并运行,特别是如果您的最终目标是开发项目。花更多时间编码,把管理员留给管理员... ;)【参考方案12】:

我们已经在 vpc 公共子网中的一个 ec2 实例中安装了 softether ***。我们从 linux/mac os/windows 连接了 softether ***,如regualr ***。之后,我们就可以从 mysql workbench、pgadmin 等工具访问所有私有资源,例如 aws aurora serverless,就像常规端点一样,甚至可以从本地计算机访问 django admin shell 命令。

希望这会有所帮助。

https://www.softether.org/4-docs/1-manual/2._SoftEther_***_Essential_Architecture/2.4_***_Server_Manager

【讨论】:

以上是关于AWS Aurora MySQL 无服务器:如何从 MySQL Workbench 连接的主要内容,如果未能解决你的问题,请参考以下文章

连接到 Aurora AWS 无服务器

Kafka 连接设置以使用 AWS MSK 从 Aurora 发送记录

如何在 Amazon Aurora 中的标准配置和无服务器配置之间切换

如何将 AWS RDS Aurora MySQL 5.6 升级到 5.7

远程 Mysql 服务器上的 Laravel 权限被拒绝(AWS aurora)

AWS RDS Aurora - 如何使用 PgAdmin 进行连接?