mysql 遇到 Access denied for user 'root'@'IP地址' 问题

发布时间 2023-10-23 00:00:55作者: whatzyt
 

前置背景:

  我在自己的阿里云服务器上使用 docker 安装了一个 mysql 容器;

  但是,最近在另一台电脑上登录这个 mysql 的时候,又遇到了 Access denied for user 'root'@'IP地址' 问题;

  在网上找了一些资料准备解决该问题的时候,发现在 docker 容器中登录 mysql 都会出现 Access denied for user 'root'@'localhost' 问题;

  也就是说,我不仅远程登录不上去,本地也登录不了,查了很多资料发现没有办法在不删除当前容器的情况下解决这个问题,这意味着我当前 mysql 中的数据会丢失... 

  所以记录一下,预防以后都不会出现该问题;

在查阅资料时,发现解决该问题很好的文章:

https://blog.csdn.net/alwaysbefine/article/details/109224657

https://www.cnblogs.com/wonder315/archive/2011/11/02/2233010.html

 

报错的原因:

  简单来说,就是mysql分本地密码和远程密码,在登录的时候如果密码出错,就会报这个错误;

  知道原因了,就有解决的办法了,就是重置密码;

  并将 root 登录权限从 localhost 改为 %,也就是所有地址登录用同一个密码;

1. 删除原有的 mysql 容器,并新建;

  删除指令:

docker rm -f mysql

 

  新建指令: 

docker run -p 3306:3306 --name mysql \
-v /mydata/mysql/log:/var/log/mysql \
-v /mydata/mysql/data:/var/lib/mysql \
-v /mydata/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=root \
-d --user root mysql:5.7

 

2. 停止服务,安全模式启动,修改 root 账号登录密码;

mysql5.6.5版本之前的更新重置密码操作:

1,停止MySQL服务

(就是因为这个停止服务,docker 安装的 mysql 可以停止容器,但是如何在容器中停止 mysql 并使用指令启动安全模式,是个问题...)

停止的方式很多,按安装方式来说,yum 安装方式:

#systemd管理方式

systemctl stop mysql 

二进制以及编译安装方式:

# chkconfig的管理方式,是centos6的方式,目前centos7还是兼容的

service mysqld stop

2,MySQL安全模式带忽略密码校验参数启动

#后台运行模式,否则需要新开窗口,那就会多很多事了 ,对吧

mysqld_safe --skip-grant-tables --skip-networking& 

3,修改 root 账号的登录地址限制,将 host 从 localhost 改为 %

update mysql.user set Host='%' where user='root';

4,无密码方式登录MySQL,SQL语句更新root密码,从而重置密码。(密码校验功能已关闭了)

update mysql.user set Password=PASSWORD('你要重置的新密码') where user='root';(mysql 8)

update mysql.user set authentication_string=password('你要重置的新密码') where user='root' and Host='%'; (mysql 5.7)

#刷新权限表

flush privileges;

5,正常模式启动MySQL,输入重置的密码,验证密码的正确性。

systemctl restart mysql#重启服务 或者 service mysqld restart#重启服务

#-p后没有空格,直接接密码。正常进入MySQL表示密码更新完成。

mysql -uroot -p你的新密码 

mysql5.6.5版本之后的更新重置密码操作:

1,2,4步都和上面的一样,第三步需要改变一下:

update mysql.user set authentication_string=PASSWORD('你的新密码') where USER='root';

#刷新权限表

flush privileges;