如题,登录好久不用的mysql时才发现保存密码的文件不小心被我删除了,于是只能到处找教程修改密码,最后胡乱拼凑出这么一个经历……
环境Win10,MySQL版本8.0.18
0.查阅官方文档
在官方的manual里简单搜索了一下,果真有教程如下: How to Reset the Root Password
不幸的是,对于我的状况这种解决方法似乎不起作用;而这个错误也在MySQL的bug list里。
于是便有了如下过程:
1. 查找各种资料+分析问题
网上重置root密码的教程也有千千万万,不过搜索力太烂,搜到的没一个对我起作用的=_=
不过倒是给我这个小白灌输了许多知识……
从旧版本到8.0有如下的许多变化:
- 旧版本下密码比对由mysql_native_password插件负责,8.0下则由caching_sha2_password负责;
- 旧版本的加密函数password()被删除;
- 早在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
在Windows 10环境下,针对MySQL 8.0.18版本,介绍了当保存密码的文件被误删后,如何通过一系列操作绕过权限验证,使用mysql_native_password插件重置root用户密码的详细步骤。
2069

被折叠的 条评论
为什么被折叠?



