文档首页/ 云数据库 RDS/ 故障排除/ RDS for MySQL/ 连接类/ RDS for MySQL实例无法访问
更新时间:2024-10-24 GMT+08:00

RDS for MySQL实例无法访问

故障描述

客户端无法连接数据库,连接数据库时返回如下报错信息:

  • 故障一
    ERROR 1045 (28000): Access denied for user ‘root'@‘192.168.0.30' (using password:YES)
  • 故障二
    ERROR 1226 (42000):User‘test' has exceeded the‘max_user_connections' resource (current value:10)
  • 故障三
    ERROR 1129 (HY000): Host ‘192.168.0.111' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'

故障一

  1. 排查密码root账号的密码是否正确。

    一般情况下,ERROR 1045报错为密码错误引起的,因此需要首要排除是否密码错误问题。

    select password(‘Test1i@123');
    select host,user,Password from mysql.user where user=‘test1';

    使用错误的密码登录就会失败。

  2. 确认该主机是否有连接数据库实例的权限。

    select user, host from mysql.user where user=‘username';

    如果该数据库用户需要从其他主机登录,则需要使用root用户连接数据库,并给该用户授权。

    以加入主机IP为192.168.0.76举例:

    GRANT all privileges ON test.* TO 'test1'@'192.168.0.76' identified by 'Test1i@123';

    flush privileges;

  3. 确认RDS for MySQL客户端和实例VIP的连通性。

    尝试进行ping连接性能,若可以ping通,排除telnet数据库端口的问题。

  4. 查看实例安全组,排查是否因安全策略问题引起的报错。
  5. 查询user表信息,确认用户信息。

    在排查中发现存在两个root用户。

    如果用户的客户端处于192.168的网段,RDS for MySQL数据库的是对root@'192.168.%'这个用户进行认证的。而用户登录时使用的为root@'%'这个账号所对应的密码,因而导致连接失败,无法正常访问。此次问题是因密码错误引起的访问失败。

    在此案例中,root@'%'为console创建实例时设置密码的账号。

故障二

  1. 排查是否在创建RDS for MySQL用户时,添加了max_user_connections选项,导致限制了连接数。

    select user,host ,max_user_connections from mysql.user where user=‘test';

    经排查发现由于设置了max_user_connections选项,导致连接失败。

  2. 增加该用户最大连接数。

    alter user test@192.168.0.100' with max_user_connections 15

  3. 查询变更结果,检查是否可正常访问数据库。

故障三

  1. 排查是否由于RDS for MySQL客户端连接数据库的失败次数(不包括密码错误),超过了max_connection_errors的值。
  2. 在数据库端解除超出限值问题。使用root用户登录mysql,执行flush hosts。

    或者执行如下命令。

    mysqladmin flush-hosts –u<user> –p<password> -h<ip> -P<port >

  3. 再次连接,检查是否可正常访问数据库。