本文介绍如何解决无法连接RDS的问题。
连接失败的常见报错
请根据现场情况与具体的报错信息,选择对应的解决方法。
MySQL或MariaDB
错误信息 | 报错原因 | 解决办法 |
| 网络互通问题。 |
更多信息,请参见解决方案。 |
| 白名单设置问题。 | |
| 用户名或密码错误。 | |
| DNS服务器无法解析地址。 | |
[Note] [MY-010914] [Server] Aborted connection 671541 to db: 'XXX' user: 'XXX' host: 'XXX' (The client was disconnected by the server because of inactivity.). | 数据库连接断开。 | 由于客户端长时间未发送任何请求,服务器的交互超时设置(如MySQL的 |
SQL Server
错误信息 | 报错原因 | 解决办法 |
无法连接到XXX。Cannot connect to XXX。在与SQL Server建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。(provider: TCP Provider, error: 0 - 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。)(Microsoft SQL Server,错误: 10060或258) | 网络互通问题。 |
更多信息,请参见解决方案。 |
无法连接到XXX。Cannot connect to XXX。 已成功与服务器建立连接,但是在登录过程中发生错误。(provider:TCP提供程序,error:0-指定的网络名不再可用。)(Microsoft SQL Server,错误:64) | 白名单设置问题。 | |
Logon failed for login 'user' due to trigger execution | 连接数满。 | |
cannot open user default database.Login failed | RDS SQL Server登录用户对应的默认数据库下没有关联的用户。 |
PostgreSQL
错误信息 | 报错原因 | 解决办法 |
Unable to connect to server: could not connect to server: Connection timed out (0x0000274C/10060)Is the server running on host “XXX.rds.aliyuncs.com” and acceptingTCP/IP connections on port XXX? | 网络互通问题。 |
更多信息,请参见解决方案。 |
| 白名单设置问题。 | |
FATAL: remaining connection slots are reserved for non-replication superuser connections | 连接数满。 | |
FATAL: password authentication failed for user "xxx". | 密码错误。 | 重置密码后重试。 重置密码具体操作,请参见重置密码。 |
DMS连接RDS数据库报错
相关操作,请参见通过DMS连接RDS MySQL数据库、通过DMS连接RDS SQL Server数据库、通过DMS连接RDSPostgreSQL数据库、通过DMS连接RDS MariaDB数据库。
错误信息 | 报错原因 | 解决办法 |
The MYSQL server is running with the --rds-deny-access option so it cannot execute this statement |
| |
对不起,您暂时无法通过DMS访问该实例。 | 您不是该实例的拥有者,该实例的拥有者并未向您授予登录权限。 | |
请检查连接地址的正确性、网络畅通情况、白名单设置 | 该问题一般发生于自建的MySQL服务器,问题原因可能是如下几点:
|
更多信息,请参见解决方案。 |
max_user_connections | RDS数据库的连接数满。 | |
因白名单问题无法登录数据库 | RDS白名单中没有添加DMS服务的IP地址段。 |
ECS实例无法通过内网访问RDS实例
通过RDS内网地址连接RDS实例前,需要先将ECS内网IP添加到RDS白名单。
说明如何添加白名单,请参见设置RDS MySQL白名单、设置RDS SQL Server白名单、设置RDS PostgreSQL白名单、设置RDS MariaDB白名单。
如果仅添加ECS外网IP地址到RDS白名单,则无法通过内网连接RDS。
ECS实例和RDS实例需要位于同一地域才能内网互通。可以是同一地域的相同或不同可用区。
请确保ECS实例和RDS实例处于同一个地域:
查看ECS实例所在地域。
查看RDS实例所在地域。
如果ECS实例和RDS实例位于不同的地域,则无法直接通过内网互通,请参见以下方法进行处理:
方法一:
方法二:ECS实例使用RDS实例的公网连接地址连接RDS实例,这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址、申请SQL Server外网地址、申请PostgreSQL外网地址、申请MariaDB外网地址。
检查网络类型
请确保ECS实例和RDS实例的网络类型相同(都是专有网络或都是经典网络)。
查看ECS实例的网络类型。
查看RDS实例的网络类型。
如果一个是经典网络,一个是专有网络,请参见以下方法进行处理:
ECS实例采用专有网络而RDS实例采用经典网络的场景:
方法一(推荐):将RDS实例从经典网络切换为专有网络(需要切换到待连接的ECS实例所在的VPC)。具体操作,请参见切换网络类型。
方法二:重新购买经典网络的ECS实例。但是VPC比经典网络更安全,建议您使用VPC。
说明ECS实例不支持从VPC迁移到经典网络。
方法三:ECS实例使用RDS实例的公网地址连接RDS实例,这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址、申请SQL Server外网地址、申请PostgreSQL外网地址、申请MariaDB外网地址。
ECS实例采用经典网络而RDS实例采用专有网络的场景:
方法一(推荐):将ECS实例从经典网络迁移到待连接的RDS实例所在的VPC,可在RDS实例详情页网络类型右侧单击查看连接详情查看RDS实例所在VPC ID。具体操作请参见单ECS迁移示例。
方法二:将RDS实例从VPC切换为经典网络。但是VPC比经典网络更安全,建议您使用VPC。
方法三:开通ClassicLink功能,使经典网络的ECS实例可以和VPC中的RDS实例通过内网互通。
说明若开通ClassicLink功能后网络不通,请参见建立ClassicLink连接后经典网络和VPC网络不通的排查思路。
方法四:ECS实例使用RDS实例的公网地址连接RDS实例,这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址、申请SQL Server外网地址、申请PostgreSQL外网地址、申请MariaDB外网地址。
如果ECS实例与RDS实例的网络类型都是专有网络,请确认它们位于同一个专有网络。
查看ECS实例的专有网络ID。
查看RDS实例的网络类型。
如果专有网络不同,请参见以下方法进行处理:
方法一(推荐):将RDS实例迁移到ECS实例所在的VPC。具体操作,请参见切换专有网络VPC和虚拟交换机。
方法二:在两个VPC之间建立云企业网。
方法三:ECS实例使用RDS实例的公网地址连接RDS实例。这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址、申请SQL Server外网地址、申请PostgreSQL外网地址、申请MariaDB外网地址。
如果ECS和RDS实例在同一个VPC和地域下,无法通过内网地址连接RDS实例(外网地址可以连接)、ping和telnet都失败。请参见由于路由问题导致ECS无法连接RDS实例处理。
无法通过外网访问RDS实例
确保连接RDS实例时使用的是RDS的外网地址。您可以在RDS控制台的数据库连接页面查看RDS的外网地址。
确保已将正确的本地设备公网IP地址添加到RDS的IP白名单。请在数据库的白名单中临时添加0.0.0.0/0
,如果设置后可以正常访问,说明是白名单设置存在问题。您可以通过以下方法获取正确的本地设备公网IP地址,并将该地址添加到白名单中。如何添加白名单,请参见设置RDS MySQL安全组、设置RDS SQL Server安全组、设置RDS PostgreSQL安全组、设置MariaDB白名单。
外网IP可能发生变化,例如外网IP是动态的,变化后导致无法连接。如需保持稳定连接,建议使用内网连接并添加内网IP到白名单。
更多教程,请参见:
相关文档
适用于
云数据库RDS