微服务访问docker中的mysql容器,查看日志发现Access denied for user ‘root‘@‘某IP地址‘ (using password: YES)
前提条件:我在微服务中连接mysql时提供的用户名和密码均是root
猜想1:微服务中application.yml中提供的root密码和数据库不符
矛盾点:部署微服务时,docker-compose.yml中mysql容器的环境配置有明确写上用户密码为root
验证:进入mysql容器内部,使用root密码登录数据库,发现登录不上去
出现矛盾可能原因:我在创建mysql容器时,将包含数据库文件的数据卷挂载到了mysql容器中的/var/lib/mysql,而数据库mysql中user表有记录用户密码等信息,覆盖了我在docker-compose.yml中mysql容器上的环境配置所设置的密码
解决方案:进入mysql容器,登录mysql,数据库里手动修改用户密码
ps:由于我是修改别人的数据库后出现问题,所以我知道原始密码
CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
结果:问题仍然未解决。。。
猜想2:我在数据库里修改用户密码时,没改对,改的时候是对用户root@localhost所做的更改,而另一个微服务ip地址压根就不是mysql容器的ip地址
注:在微服务中远程登录mysql需要进行各种校验,而这些校验发生在mysql的连接层
解决:对mysql中用户root@%(这里的的%是指允许所有远程主机访问)修改密码,修改为root
结果:微服务正常访问mysql!!!!!!!!!!!!!