问题的表现

在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;

文章来源于互联网:在linux上部署的服务,无法连接本地的MySQL

发表评论