MYSQL重置密码

v0.1版

Posted by Sam on July 13, 2022

1、问题原因 由于我是高度依赖密码管理软件来记录密码的,只是有一次在设置MYSQL密码时发现有特殊字符无法使用我想设置的密码,临时想起一个密码就设置了,以至现在密码想不到然后重置.

2、解决方案 – 首先重置密码root密码只是一个很简单的操作,只要这样… 那样.. OK ,重置完成,。

第一步 ~ 进入MYSQL容器 docker exec -it mysql /bin/bash

第二步 ~ 设置跳过权限表的加载,就是设置成免密登录(警告:这就意味着任何用户都能登录进来,并进行任何操作,相当不安全.) echo "skip-grant-tables" >> /etc/mysql/conf.d/docker.cnf

第三步 ~ 退出容器 exit

第四步 ~ 重启容器 docker restart mysql

第五步 ~ 再次进入容器 docker exec -it mysql /bin/bash

第六步 ~ 登录 mysql(由于第二步已经设置无密码登录) mysql -uroot

第七步 ~ 更新权限 flush privileges;

第八步 ~ 修改密码 alter user 'root'@'localhost' identified by '123456';

第九步 ~ 更新权限 flush privileges;

第十步 ~ 退出mysql exit

第十一步 ~ 替换掉刚才加的跳过权限表的加载参数 sed -i "s/skip-grant-tables/ /" /etc/mysql/conf.d/docker.cnf

第十二步 ~ 退出容器 exit

第十三步 ~ 再次重启容器 docker restart mysql

Finish… 现在可以用 root 和刚才设置的密码 登录

3、出现问题 No.1: 在执行第八步时报错了 ERROR 1290 (HY000): The MySQL server is running with the –skip-grant-tables option so it cannot execute this statement

好慌!你好像是因为第七步没有执行的原因


No.2: 密码设置成功.mysql -uroot -p 命令行也正常,但工具就是连不上!
疯狂百度,最后发现是mysql8 的加密方式有了变化。

解决:
    把第八步的语句替换为下面两条重复操作一次:
        ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
        ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';