mysql8.0 修改密码

我使用的是 docker,但是这一期主要是讲解 mysql8 版本修改密码,我相信 linux、windows 和不使用 docker 应该都是可以的。

先说一下我的情况:

我在本地 windows 玩 docker 部署 mysql8.0.25 版本,无问题啦~

然后我在 linux 里面玩,我个人认为,配置流程都是一样的,虽然说也过了有半个月的样子,但是 应该是差不多的。。。

然后出现了这样的问题:

docker 中 mysql 容器启动成功,正常运行,没有报错 没有任何异常。

我在我本地也使用了 Navicat Premium 工具进行连接的,提示:

" Access denied for user 'xxxx'@'xxxx' (using password: YES)"

我在想,会不会是配置问题,没有开启外网可连接,等等假象。

然后我去检查,发现,配置文件 my.cnf 是默认的,我并没有修改, 也开启了 外网可以连接。

那么到底是什么问题?

随后,我打算先进入 docker 容器:

docker exec -it 容器名/容器ID bash

然后连接 mysql

mysql -u root -p

然后输入密码,当我输入后,返回这样的提示:

 Access denied for user 'root'@'localhost' (using password: YES)

还是说,用户访问被拒绝。。

我想,是不是我密码输出了,当我去看我初始化的密码(我都删除容器 重新运行好几次了),甚至粘贴复制,还是错误的。

也是尝试百度,各种看资料,给的参考答案是:

重置密码!

what???

行吧,我服软,毕竟纠结了半天,来试试重置一个新的密码

在重置密码的过程中,我特地查阅了一下资料,"说是 mysql 5的版本,和现在 mysql 8的版本,密码的规则是不一样的,所以修改密码的语句,也是不一样的"

首先,我们无法进入 mysql,就是上面会给出错误提示的,那么我们修改密码就无法下手了。

所以,我们要去配置文件 my.cnf 中做手脚

在 my.cnf 文件中,加入:

skip-grant-tables

这一条,就可以不用使用密码,而进行登录了。

不过我尝试了,远程连接的情况下,就是我在本地 windows ,连接 linux 的 mysql 还是不行。

而是在 linux 下进入 docker 的 mysql 容器,就可以不输入密码。

换句话说,就是 mysql 在你哪个 环境系统里,你就在那个环境里,使用命令进入:

mysql -u root -p

还是会弹出输入密码:

这时候,并不需要再输入密码了,直接按回车键就可以了

mysql8.0 修改密码_第1张图片

当我们进来 mysql 服务后,就可以在这里面修改密码了。

首先 我们先连接 mysql 数据库

同学们可以看到,在我们 输入的光标前面,有一个 "mysql>" 

其实,这并不是说 我们默认指向的是 mysql 数据库,所以我们需要先连接到 mysql 数据库

这样说可能有点不明白,先看看我们当前有哪些数据库:

show databases;

mysql8.0 修改密码_第2张图片

能看到,里面有个 mysql 数据库的,我们连接它

use mysql;

mysql8.0 修改密码_第3张图片

这样的话,就是说,我们连接到了 mysql 数据库,就可以查看 mysql 数据库里的所有表:

show tables;

mysql8.0 修改密码_第4张图片

就会显示出所有的表,最主要的就是这个 user 表,因为我们是做密码修改。

 我们先查看这个表的几个关键字段:

select Host,User,authentication_string from user;

mysql8.0 修改密码_第5张图片

其中,密码我打了马赛克。然后就是 Host 中第一行,应该是 "%", 这里突然变成这样,我暂时也不知所措。。

之所以会打马赛克,是因为 我在此之前,已经修改好了密码,而且密码 即使加密了,也建议不要暴露喔~

好了,我们开始修改密码

首先,先将这个密码设置为空

update user set authentication_string='' where user='root';

再刷新权限

flush privileges;

最后就是修改成我们想要的密码:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY "123456";
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY "123456";

上面这是两段修改语句。

为啥是两段呢? 第一段,是针对 User = root,Host = localhost 这一行的数据,localhost 这个就是说,修改的是我们本地登录的密码。

如果仅修改了这一行,那么我们在 外网连接时,还是连接不进来的。

所以我们就需要用到第二行 User = root,Host = % 

% 的意思,就是说 所有的 任意的,所以外网也就可以用这一行的密码连接。

最后我们再刷新一下权限:

flush privileges;

退出容器,找到 mysql的配置文件 my.cnf 将之前的 "skip-grant-tables" 给删除掉

重启 mysql 容器/服务

无论是内网还是外网,都可以使用我们刚刚设置的密码进行访问了。

你可能感兴趣的:(MYSQL,docker,mysql,docker)