解决无法连接实例问题

本文介绍如何解决无法连接RDS的问题。

连接失败的常见报错

请根据现场情况与具体的报错信息,选择对应的解决方法。

MySQL或MariaDB

错误信息

报错原因

解决办法

  • ERROR 2003 (HY000): Can't connect to MySQL server on 'XXX'(10038或10060或110)

  • 无法连接到数据库:XXX

网络互通问题。

  • 确保ECS实例和RDS实例处于同一个地域。

  • 确保ECS实例和RDS实例的网络类型相同。

  • 确保ECS和RDS实例在同一个专有网络中。

  • 检查ECS实例的内网IP地址是否已添加到RDS实例的白名单。

更多信息,请参见解决方案

  • ERROR 1045 (HY000): #28000ip not in whitelist

  • ERROR 2801 (HY000): #RDS00ip not in whitelist, client ip is XXX

  • ERROR 2013 (HY000): Lost connection to MySQL server at ‘reading authorization packet’, system error:110

白名单设置问题。

检查实例白名单

  • ERROR 1045 (28000): Access denied for user ‘XXX’@’XXX’ (using password: YES或NO)

  • ERROR 1045 (28000): Authentication Failed For RDS maybe username or password is incorrect

用户名或密码错误。

检查连接信息中的用户名和密码

  • ERROR 2005 (HY000): Unknown MySQL server host ‘XXX’ (110或11004)

  • SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known

  • Name or service not known

  • unknown server host

DNS服务器无法解析地址。

检查连接地址或修改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的`interactive_timeout``wait_timeout`)到期导致的。您可以检查数据库的配置,并根据需要调整这些超时设置,以防止非预期的断开连接。

DMS连接RDS数据库报错

相关操作,请参见通过DMS连接RDS MySQL数据库

错误信息

报错原因

解决办法

The MYSQL server is running with the --rds-deny-access option so it cannot execute this statement

  • RDS实例过期。

  • RDS实例的磁盘满。

续费或升级实例存储空间

对不起,您暂时无法通过DMS访问该实例。

您不是该实例的拥有者,该实例的拥有者并未向您授予登录权限。

授权阿里云账号

请检查连接地址的正确性、网络畅通情况、白名单设置

该问题一般发生于自建的MySQL服务器,问题原因可能是如下几点:

  • ECS实例的防火墙限制或自建MySQL服务器所在主机的防火墙限制。

  • ECS安全组未对DMS开放。

  • MySQL服务器未启动。

  • MySQL服务器只允许root账户本地登录。

  • 检查ECS或MySQL的防火墙规则。

  • 将DMS的IP加入到ECS安全组中。

  • 使用root账户登录MySQL。

更多信息,请参见解决方案

max_user_connections

RDS数据库的连接数满。

解决RDS连接数被占满的问题

因白名单问题无法登录数据库

RDS白名单中没有添加DMS服务的IP地址段。

添加DMS服务的IP地址段

ECS实例无法通过内网访问RDS实例

  • 通过RDS内网地址连接RDS实例前,需要先将ECS内网IP添加到RDS白名单。

    说明
    • 如何添加白名单,请参见设置RDS MySQL白名单

    • 如果仅添加ECS外网IP地址到RDS白名单,则无法通过内网连接RDS。

  • ECS实例和RDS实例需要位于同一地域才能内网互通。可以是同一地域的相同或不同可用区。

    • 请确保ECS实例和RDS实例处于同一个地域:

      1. 查看ECS实例所在地域。

      2. 查看RDS实例所在地域。

    • 如果ECS实例和RDS实例位于不同的地域,则无法直接通过内网互通,请参见以下方法进行处理:

      • 方法一:

        • 将ECS实例释放退款,重新购买与RDS实例同一地域的实例。

        • 将RDS实例释放退款,重新购买与ECS实例同一地域的实例。

      • 方法二:ECS实例使用RDS实例的公网连接地址连接RDS实例,这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址

检查网络类型

  1. 请确保ECS实例和RDS实例的网络类型相同(都是专有网络或都是经典网络)。

    • 查看ECS实例的网络类型。

    • 查看RDS实例的网络类型。

  2. 如果一个是经典网络,一个是专有网络,请参见以下方法进行处理:

    • ECS实例采用专有网络而RDS实例采用经典网络的场景:

      • 方法一(推荐):将RDS实例从经典网络切换为专有网络(需要切换到待连接的ECS实例所在的VPC)。具体操作,请参见切换网络类型

      • 方法二:重新购买经典网络的ECS实例。但是VPC比经典网络更安全,建议您使用VPC。

        说明

        ECS实例不支持从VPC迁移到经典网络。

      • 方法三:ECS实例使用RDS实例的公网地址连接RDS实例,这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址

    • 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外网地址

  3. 如果ECS实例与RDS实例的网络类型都是专有网络,请确认它们位于同一个专有网络。

    • 查看ECS实例的专有网络ID。

    • 查看RDS实例的网络类型。

  4. 如果专有网络不同,请参见以下方法进行处理:

    • 方法一(推荐):将RDS实例迁移到ECS实例所在的VPC。具体操作,请参见切换专有网络VPC和虚拟交换机

    • 方法二:在两个VPC之间建立云企业网

    • 方法三:ECS实例使用RDS实例的公网地址连接RDS实例。这种方式的性能、安全性、稳定性较差。如何申请外网地址,请参见申请MySQL外网地址

  5. 如果ECS和RDS实例在同一个VPC和地域下,无法通过内网地址连接RDS实例(外网地址可以连接)、ping和telnet都失败。请参见由于路由问题导致ECS无法连接RDS实例处理。

无法通过外网访问RDS实例

确保连接RDS实例时使用的是RDS的外网地址。您可以在RDS控制台数据库连接页面查看RDS的外网地址。

确保已将正确的本地设备公网IP地址添加到RDS的IP白名单。请在数据库的白名单中临时添加0.0.0.0/0,如果设置后可以正常访问,说明是白名单设置存在问题。您可以通过以下方法获取正确的本地设备公网IP地址,并将该地址添加到白名单中。如何添加白名单,请参见设置RDS MySQL安全组

说明

外网IP可能发生变化,例如外网IP是动态的,变化后导致无法连接。如需保持稳定连接,建议使用内网连接并添加内网IP到白名单。

更多教程,请参见:

相关文档

RDS连接失败的排查方法

适用于

云数据库RDS