MySQL8.0忘记root密码的踩坑经历

在Windows 10环境下,针对MySQL 8.0.18版本,介绍了当保存密码的文件被误删后,如何通过一系列操作绕过权限验证,使用mysql_native_password插件重置root用户密码的详细步骤。

如题,登录好久不用的mysql时才发现保存密码的文件不小心被我删除了,于是只能到处找教程修改密码,最后胡乱拼凑出这么一个经历……
环境Win10,MySQL版本8.0.18

0.查阅官方文档

在官方的manual里简单搜索了一下,果真有教程如下: How to Reset the Root Password
不幸的是,对于我的状况这种解决方法似乎不起作用;而这个错误也在MySQL的bug list里。
于是便有了如下过程:

1. 查找各种资料+分析问题

网上重置root密码的教程也有千千万万,不过搜索力太烂,搜到的没一个对我起作用的=_=
不过倒是给我这个小白灌输了许多知识……
从旧版本到8.0有如下的许多变化:

  1. 旧版本下密码比对由mysql_native_password插件负责,8.0下则由caching_sha2_password负责;
  2. 旧版本的加密函数password()被删除;
  3. 早在5.x版本用户的密码储存的列的名称就由password变成了authentication_string
    然而并没有什么卯月。
    多方碰壁之后最终搞出来以下这个奇怪的方法
2.解决过程

(以下均在管理员身份运行的cmd窗口下进行操作)
首先输入

 mysqld  --console --skip-grant-tables --shared-memory

以在登陆时跳过输入密码的操作。
之后,新建一个cmd窗口,使用

mysql -u root

直接登录。
但在–skip-grant-tables下很多指令都是禁用的,所以我只能想了个歪门邪道:同时修改plugin和authentication_string的值,因为我可以计算出mysql_native_password加密后密码的值,但我却不会计算新的加密方法加密过后的值……
发现"123"加密后的值是 “*23AE809DDACAF96AF0FD78ED04B6A265E05AA257”,于是在登陆后的窗口里输入:

update user set plugin="mysql_native_password" where user ='root';
update user set authentication_string="*23AE809DDACAF96AF0FD78ED04B6A265E05AA257" where user='root';
flush privileges;

这样一来,root用户的密码就被设置成了123.
之后退出再重新登录,可算可以正常使用了……

P.S. 实际上在进行操作时可以直接把密码设成空……但我并没想到这一点
直接写成

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

就完成了……
参考:
https://www.jianshu.com/p/0307f17fcd4a
https://www.cnblogs.com/moonrush/p/9182540.html
https://www.cnblogs.com/xyabk/p/10882913.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值