MySQL8.0!!!登录失败|ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password

还是老规矩,重点直接看黄字,或者直接看第三节解决方案,其他都是废话!!
运行环境:windows10、mysql8.0.24、cmd用管理员权限运行。

一、前情提要

1、博主找了一份源码,数据库sql文件的编码格式是utf8mb4,然后当时的mysql版本是mysql5.0不支持utf8mb4,于是就开始了卸载旧版本安装新版本(当前最新mysql8.0.24)的历程。

2、跟着网上的教程一顿操作猛如虎之后,以为安装成功,输入mysql -u root -p,然后输入生成的初始root密码,结果就报错ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)。(如图)
在这里插入图片描述
3、接着我就去收这个error的解决方案,然后网上让我修改my.ini文件的[mysqld]底下加了一句skip-grant-tables,然后再登录就报错:ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)

4、然后后面怎么操作都是报这个error2003的错误!

!!!好家伙,如果你目前的情况跟我一样,首先,你先在cmd里面输入命令net start mysql,这里显示启动成功,然后打开“服务”,发现mysql服务根本就没有启动!!!!! orz!!!!万恶之源!!!解决了一上午终于被我找到原因了!!
在这里插入图片描述
好的,如果以上都是一样,那么你的情况与我相同,一下解决方案对你来说有效,可以接着往下跟着操作就好了。除给出解决方案以外,我还会解释报错的原因和解释。

二、报错原因

首先感谢博主:博文链接
1、首先报错:无权限错误
ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
【翻译:拒绝用户“root”@“localhost”的访问(使用密码:是)】

原因:root没有使用权限
常规解决方案:也就是在my.ini中加那一句skip-grant-tables;但是这个方法用过之后不仅没有解决问题,mysql服务也无法正常打开!通过查询解决方案后,发现这个方法对于mysql8.0以上版本并不适用,需要另一种解决方案。

正确解决方案:见下一小节。

2、报错:mysql服务未启动错误
ERROR 2003 (HY000): Can’t connect to MySQL server on ‘localhost’ (10061)
【翻译:错误2003(HY000):无法连接到“localhost”上的MySQL服务器(10061)】
也就是mysql服务没有打开

原因:试了之后发现把上一步加进my.ini里面的那句skip-grant-tables删掉就不会报这个错了,mysql服务也能正常打开,所以产生这个报错的原因就是上一步的操作影响。

正确解决方案:见下一小节。

三、解决方案 (进入正题进入正题!!!!)

一、如果之前在my.ini里添加了skip-grant-tables,删掉这一句,保存。(删的时候要先手动关闭mysql服务,不然保存不了。)然后net start mysql启动mysql服务,重新mysql -uroot -p输入密码,然后发现不报服务未启动的错了,回到第一个错误:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)。

二、重点来了:
【注】如果以下命令执行时报出了一些奇怪的错误,你可能需要先cd到你的mysql安装目录,或者bin目录下,再执行这条命令,如果觉得麻烦那可以直接设置一下mysql的环境变量,甩个教程链接,<mysql8.0环境变量配置教程 >,只用在系统变量PATH添加bin目录的路径就好了。

1、用管理员权限打开!!两个!!cmd窗口!!!两个!两个!重要的事情说三遍!
2、先在 第一个窗口 输入命令:

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

然后回车,先不关掉这个窗口。
在这里插入图片描述
3、在 第二个窗口 输入mysql -uroot -p,不输入密码直接回车,就可以登录上去了,如图。
在这里插入图片描述
4、由于博主是初次安装mysql8.0所以下一步需要修改密码,也是在 第二个窗口 操作:输入以下三句命令重置root密码为空:
(1)输入use mysql,回车;

use mysql

(2)输入如下命令回车,重置root密码为空;

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

(3)输入quit;退出mysql;

quit;

至此密码设置为空成功,下一步修改密码。
(本操作命令运行截图在上一张图中。)
5、把以上打开的两个cmd窗口 都关闭 !!!重新用管理员权限新打开一个窗口,进行最后一步修改密码操作。
(1)重新打开mysql服务;

net start mysql

(2)使用root连接数据库,不输入密码,直接回车(因为上一步已经把密码设空了);

mysql -u root -p

(3)设置新密码,中文处记得改成你的新密码;

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

(4)输入quit;退出,再次mysql -u root -p重新连接数据库,输入刚刚修改的密码,就能成功登录了!
在这里插入图片描述

问题解决!撒花!!!祝心情愉快!!!!

最后感谢博主:博文链接