说明:

        博主用的是mysql8.0.18,网上在找回mysql密码,清一色的教程都是修改root用户的密码,并且使用“ update user set authentication_string=‘123456’ where user=‘root’ ”,博主使用后,发现并没有用,依旧提示密码错误。

解决方法:

        前1-4步可以参考如下链接,但是第5步开始参考本文章

关于数据库mysql5.7版本 登录密码password 改变为 authentication_string后修改密码/忘记密码 的实操解决经验

        个人总结 :

                1.关闭mysql相关服务(mysql安装默认名可能是mysql80,然后如果重新初始化过可能会有mysql,两个都有,两个都关闭)

                

        2.在mysql安装目录的bin文件下,打开cmd,执行mysqld --skip-grant-tables

        3.mysql -uroot,不用密码直接登陆

        4.执行“select user,host,authentication_string,plugin from user;”命令(“”内的才是命令),找到user表的user、host、authentication_string(即密码)

        博主尝试过参考文章后面步骤,是没有用的!!!

        (

                UPDATE user SET `authentication_string` = PASSWORD('root');

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

        )

        5.修改密码:

                在第4步我们看到查询结果

                

                很明显,即使是一个密码mysql_native_password,authentication_string的值是一个奇怪的数字。原因是mysql其实存储的是一个转化过的值,不是密码本身。如果按照网上的教程直接“ update user set authentication_string='123456' where user='root'; ”,能登上去才有鬼!!!

                而且网上各种教程有使用PASSWORD关键字,这个在8.0及以上早就没了,这不是误导人?

                所以“ update user set authentication_string='*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' where user='root'; ”,在刚才运行了“mysqld --console --skip-grant-tables --shared-memory”的cmd两次ctrl+c取消运行,重启mysql服务,再次cmd输入mysql -uroot -p123456,就能登入root账号了!!!

        (*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 就是123456转化的值)

        ps:

                我不知道这个映射是否对于每个电脑是否是同一种(理论上是相同的),如果不是的话,如果电脑中的mysql的data很重要,不想删除的话,可以先改个名在别的地方留个备份。之后重新安装mysql,在安装的时候将mysql的root的初始密码设置为你知道的值,然后以root身份,进入mysql,在use mysql后调用“select user,host,authentication_string,plugin from user;”查看对应的authentication_string值,拷贝下来,之后可以将备份的mysql的data替换现有data目录,重复之前的1-5步

        (如何卸载可以参考:MySql8.0以上版本彻底卸载)

        

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐