文档首页> 云数据库 RDS> 常见问题> 数据库连接> RDS实例连接失败怎么办
更新时间:2024-01-15 GMT+08:00
分享

RDS实例连接失败怎么办

问题分析

主要从八个方面考虑:

  1. 排除数据库实例异常

    例如:关系型数据库系统故障,实例状态异常,实例或表被锁定。

  2. (常见)使用正确的客户端连接方式
    • 内网连接需要RDS与ECS实例必须在同一区域、VPC内。
    • 公网连接需要购买或使用已有EIP,并对RDS实例绑定该EIP 。
  3. 使用正确的SSL方式安全连接

    界面SSL开关开启和关闭,分别对应不用的连接命令。例如:

    • 开关开启:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem
    • 开关关闭:mysql -h 172.16.0.31 -P 3306 -u root -p
  4. 排除连接命令错误

    例如:连接地址错误、端口参数配置错误、用户名和密码错误、SSL方式下命令错误。

  5. (常见)排除网络不通

    内网访问

    1. 确认ECS与RDS是否在同一个区域,VPC。
    2. 检查安全组规则。

      安全组外访问安全组内的RDS实例时,需要为安全组添加相应的入方向规则

    3. 在ECS上测试是否可以正常连接到RDS实例地址的端口。

    公网访问

    1. 检查安全组规则。

      安全组外访问安全组内的RDS实例时,需要为安全组添加相应的入方向规则

    2. 检查网络ACL规则。
    3. 相同区域主机进行ping测试。
  6. (常见)排除实例的连接数满的情况

    实例连接数过多,可能会导致业务侧无法正常连接。

  7. (常见)排除实例的磁盘满的情况

    当实例处于“磁盘空间满”状态时,影响数据的正常读写操作。

  8. 连接失败的常见报错

    包含连接失败的常见报错,以及相应的解决方法。

排查思路

图1 连接实例失败排查思路
  1. 排除数据库实例异常

    检查办法:请在控制台检查云实例状态是否为“正常”。

    能原因:关系型数据库系统故障,实例状态异常,实例或表被锁定等。

    解决方案:如果实例状态为“异常”,请尝试重启。

    图2 检查实例状态

  2. 使用正确的客户端连接方式

    建议安装不低于数据库实例版本的引擎客户端

    内网和公网连接实例的具体操作步骤,请参见外部服务器能否访问RDS数据库

    表1 客户端连接方式

    连接方式

    使用场景

    连接样例

    内网方式

    系统默认提供内网IP地址。

    当应用部署在ECS上,且该ECS与RDS实例处于同一区域,同一VPC时,建议单独使用内网IP连接ECS与RDS实例。

    以RDS for MySQL为例:

    mysql -h <内网地址> -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    公网方式

    不能通过内网IP地址访问RDS实例时,使用公网访问,建议单独绑定弹性公网IP连接ECS(或公网主机)与RDS实例。

    用户需要购买弹性公网IP,请参见弹性公网IP计费说明

    以RDS for MySQL为例:

    mysql -h <弹性公网IP> -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

  3. 使用正确的SSL方式安全连接
    • (推荐)SSL方式:实例连接管理页面的SSL开关开启,并且上传证书到ECS。

      mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

      图3 SSL开关开启

    • 普通方式:实例基本信息页面的SSL开关关闭。

      mysql -h 172.16.0.31 -P 3306 -u root -p

  4. 排除连接命令错误

    请获取正确的连接地址、端口参数配置、用户名和密码、SSL方式下命令错误,并重试连接实例。

    SSL内网连接RDS for MySQL示例:mysql -h 172.16.0.31 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 连接地址

      目标实例的“连接管理”页面,“内网连接”页签的“内网地址”

      图4 内网地址

    • 数据库端口

      目标实例的“连接管理”页面,“内网连接”页签的“数据库端口”

    • 用户名和密码

      root管理员账号及其对应的密码。

    • 证书名称

      SSL证书文件名,该文件需放在执行该命令的路径下。

    SSL公网连接RDS for MySQL示例:mysql -h 公网地址 -P 3306 -u root -p --ssl-ca=/tmp/ca.pem

    • 连接地址

      目标实例的“连接管理”页面,“公网连接”页签的“弹性公网IP”

      图5 弹性公网IP
    • 数据库端口

      目标实例的“连接管理”页面,“公网连接”页签的“数据库端口”

    • 用户名和密码

      root管理员账号及其对应的密码。

    • 证书名称

      SSL证书文件名,该文件需放在执行该命令的路径下。

  5. 排除网络不通
    内网访问
    1. 检查ECS与RDS是否在同一个区域,VPC。
      图6 查看ECS的VPC
      图7 查看RDS的VPC
    2. 检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的内网IP地址和端口添加到出方向规则。
        图8 ECS的安全组
      • 查看RDS的安全组的入方向规则,需要将ECS实例的IP地址和端口添加到入方向规则
    3. 在ECS上测试是否可以正常连接到RDS实例地址的端口。
      telnet <连接地址> <端口号>
      • 可以通信,说明网络是正常的。
      • 无法通信,请提交工单联系华为云客服协助解决。

    公网访问

    1. 检查安全组规则。
      • 查看ECS的安全组的出方向规则,如果目的地址不为“0.0.0.0/0”且协议端口不为“全部”,需要将RDS实例的公网IP地址和端口添加到出方向规则。
        图9 ECS的安全组
      • 查看RDS的安全组的入方向规则,需要将ECS实例的IP地址和端口添加到入方向规则
    2. 检查网络ACL规则。
      1. 进入虚拟私有云网络ACL列表。
      2. 检查EIP绑定的网卡是否在网络ACL关联的子网下。
      3. 查看网络ACL当前是“开启”状态还是“关闭”状态。

        若网络ACL为“开启”状态,需要添加ICMP放通规则进行流量放通

      注意:网络ACL的默认规则是丢弃所有出入方向的包,关闭“网络ACL”后,其默认规则仍然生效。

    3. 相同区域主机进行ping测试。

      如果在原ECS上没有ping通RDS实例绑定的EIP,请在相同区域的另一台ECS上去ping该EIP,如果可以正常ping通,说明虚拟网络正常,请提交工单联系华为云客服协助解决。

  6. 排除实例的连接数满的情况

    检查办法

    1. 通过show variables like '%max%connections%';命令查看实例连接数,示例:

    2. 查看实例的连接数指标是否已达上限,可查看目标实例的“数据库总连接数”“当前活跃连接数”,判断是否需要释放连接。

    可能原因:数据库连接数过多,可能会导致业务侧无法正常连接,也会导致实例全量备份和增量备份失败,影响业务的正常使用。

    解决方案
    1. 请及时排查业务侧连接是否有效,优化实例连接,释放不必要的连接。
    2. 如果设定值为default,可以对数据库进行规格扩容,用以提高max_connections的值,具体请参见变更数据库规格
    3. 云监控服务目前可以监控数据库CPU、内存、磁盘、连接数等指标,并且设置告警策略,出现告警时可以提前识别风险。支持的监控指标请参见支持的监控指标
  7. 排除实例的磁盘满的情况
    检查办法:磁盘空间使用率可通过管理控制台或云监控服务查看。
    • 通过管理控制台查看

      选择目标实例,单击实例名称,进入“基本信息”页面。在“存储空间”模块,查看磁盘使用率。

      图10 查看磁盘使用率
    • 通过云监控服务查看

      选择目标实例,单击“查看监控指标”,跳转到云监控页面,查看目标实例的磁盘使用率指标。

    可能原因及解决方案:请参见RDS实例磁盘满导致实例异常的解决方法

  8. 连接失败的常见报错

    通过命令连接数据库实例时,可能出现的报错信息和解决方案如下所示:

    • ERROR 2013:Lost connection to MySQL server during query

      连接超时参数“wait_timeout”和“interactive_timeout”设置过小时,RDS for MySQL会自动断开超时的空连接。具体请参见MySQL客户端连接实例后会自动断开

    • ERROR 1045 (28000): Access denied for user 'root'@'192.168.0.30' (using password: YES)

      排除是否密码错误问题,确认该主机是否有连接数据库实例的权限,以及RDS for MySQL客户端和实例VIP是否可以连通,具体请参见连接RDS实例失败的常见报错

    • ERROR 1226 (42000): User 'test' has exceeded the 'max_user_connections' resource (current value:10)

      排查是否限制了实例的连接数,导致连接失败,具体请参见连接RDS实例失败的常见报错

    • ERROR 1129 (HY000): Host '192.168.0.111' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

      排查是否由于RDS for MySQL客户端连接数据库的失败次数(不包括密码错误),超过了max_connection_errors的值,导致连接失败,具体请参见连接RDS实例失败的常见报错

    • [Warning] Access denied for user 'username'@'yourIp' (using password: NO)

      连接RDS for MySQL和RDS for PostgreSQL实例时出现该报错,请检查用户名或密码是否正确。

    • [Warning] Access denied for user 'username'@'yourIp' (using password: YES)

      连接RDS for MySQL和RDS for PostgreSQL实例时出现该报错,请检查用户名或密码是否正确。

    • Login failed for user 'username'

      连接RDS for SQL Server实例时出现该报错,请检查用户名或密码是否正确。

  9. 如果上述方法均不能解决您的疑问,请提交工单联系华为云客服为您解答。
分享:

数据库连接 所有常见问题

more