问题的表现
在A服务器上部署了一个mysql实例。其他服务器上的服务,可以正常连接该mysql实例,但是A服务器上的服务,无法连接,并报错:
java.sql.SQLException: Access denied for user 'root'@'xxx' (using password: YES)
问题的原因
上面报错信息一般表示密码错误。
mysql有一张user表,维护了用户信息。连接mysql,并查询这张表
第一步:mysql -u root -p
第二步:select user,host,password from mysql.user;
信息如下:
user | host | password |
---|---|---|
root | % | *55B565DA3839E5955A68EA96EB735 |
root | 127.0.0.1 | |
root | ::1 | |
root | xxx |
(root,%),表示可以远程登录,并且是除服务器外的其他任何终端,%表示任意IP都可登录。
(root,127.0.0.1 ),表示可以本机登陆,即可以在服务器上登陆。
(root,xxx),表示主机名为xxx可以登陆,xxx具体指的哪台机器,可以在cat /etc/hostname查看。
(root,::1) , ::1 是IPv6格式的 127.0.0.1 。
可以看到,报错信息是'root'@'xxx',而user表中,xxx密码是空的,我们的配置文件中的密码不是空的,所以报错。
解决的方案
把root@xxx密码改了,与root@%一致。
第一步:mysql -u root -p
第二步:set password for root@'xxx'= password('123');
第三步:flush privileges;
网友评论