更新时间:2024-12-13 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'
故障一
- 排查密码root账号的密码是否正确。
一般情况下,ERROR 1045报错为密码错误引起的,因此需要首要排除是否密码错误问题。
select password(‘Test1i@123'); select host,user,Password from mysql.user where user=‘test1';
使用错误的密码登录就会失败。
- 确认该主机是否有连接数据库实例的权限。
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;
- 确认RDS for MySQL客户端和实例VIP的连通性。
尝试进行ping连接性能,若可以ping通,排除telnet数据库端口的问题。
- 查看实例安全组,排查是否因安全策略问题引起的报错。
- 查询user表信息,确认用户信息。
在排查中发现存在两个root用户。
如果用户的客户端处于192.168的网段,RDS for MySQL数据库的是对root@'192.168.%'这个用户进行认证的。而用户登录时使用的为root@'%'这个账号所对应的密码,因而导致连接失败,无法正常访问。此次问题是因密码错误引起的访问失败。
在此案例中,root@'%'为console创建实例时设置密码的账号。
故障二
- 排查是否在创建RDS for MySQL用户时,添加了max_user_connections选项,导致限制了连接数。
select user,host ,max_user_connections from mysql.user where user=‘test';
经排查发现由于设置了max_user_connections选项,导致连接失败。
- 增加该用户最大连接数。
alter user test@‘192.168.0.100' with max_user_connections 15。
- 查询变更结果,检查是否可正常访问数据库。
故障三
- 排查是否由于RDS for MySQL客户端连接数据库的失败次数(不包括密码错误),超过了max_connection_errors的值。
- 在数据库端解除超出限制问题。使用root用户登录mysql,执行flush hosts。
或者执行如下命令。
mysqladmin flush-hosts –u<user> –p<password> -h<ip> -P<port >。
- 再次连接,检查是否可正常访问数据库。
父主题: 连接类