问题原因
今天在操作自己云服务器MySQL数据库的时候发现使用root进行远程登录的时候被拒绝了,一直提示Access denied for user ‘root‘@‘localhost‘ (using password: YES)。
可以确认自己账号密码是没有错的。后来以为是远程访问出问题了,进入到容器内部,使用命令进行登录也报错。
不明白是什么原因造成的。
解决办法
有映射配置文件的就直接在映射的配置文件中添加skip-grant-tables
skip-grant-tables
没有映射的话需要进入到MySQL的容器中,找到/etc/mysql/conf.d/my.cnf文件,在my.cnf中添加skip-grant-tables
添加完成后需要重启一下MySQL容器
docker restart mysql
接下来需要进入到容器内部,进行密码的修改,权限的修改。
docker exec -it mysql /bin/bash
mysql -uroot -p
输完mysql -uroot -p直接回车就能进入到MySQL的操作页面了。
进入到MySQL界面后,需要先刷新一下权限,不然可能会提示在skip-grant-tables模式下无法修改密码
flush privileges;
修改一下密码
update mysql.user set authentication_string=password('123456') where user='root' ;
刷新一下权限
flush privileges;
然后再看一下root账号的访问权限是否可以远程访问,不能的话需要设置为可以远程访问,我的不知道为什么不能远程访问了
设置root账号可以远程访问
update user set host='%' where user='root';
刷新一下权限
flush privileges;
查询一下root账号的host是否为%
select host,user from user;
root账号的密码以及权限都修改完成,最后删除MySQL配置文件中的skip-grant-tables,重启容器
docker restart mysql
重启完后,重新打开Navicat,点击数据库,完美打开。
收工下班,吃饭。