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';