报(ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘),通过重置MySQL密码来解决

272 阅读3分钟

🎯导读:本文记录了解决MySQL数据库连接问题的过程。作者遇到ERROR 1045错误后,通过关闭MySQL服务、以管理员身份绕过权限验证、清空root用户密码以及调整密码复杂度策略等步骤,最终成功重置了MySQL的root账户密码。本文适合遇到类似数据库连接问题的技术人员参考。

事情起源

前天晚上好好的,第二天打开电脑正要开始写垃圾代码时,发现项目启动报错了,看了一下,发现是数据库连不上,我一脸懵逼,只能到万能的互联网上面查询解决方法,最后经过从不同的资料中汲取知识,最终成功解决了问题。这篇文章用来记录本人解决问题过程中出现的问题并进行解决的过程,方便后续再出现相同问题时可以不费吹灰之力就能解决掉。

说明

  • 本人mysql版本为mysql-8.0.27-winx64,其他的版本不保证一定能成功
  • ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ 错误其实就是账号密码验证失败,导致连接不成功。因此只需要重置MYSQL的root账户对应的密码即可

操作

一、关闭mysql服务

首先进入cmd命令行窗口,关闭正在运行的mysql服务 在这里插入图片描述

二、使用管理员权限打开cmd窗口,输入命令跳过权限验证

使用管理员权限打开cmd窗口,cd进入mysql安装包的bin目录下面,然后执行如下命令来mysqld --console --skip-grant-tables --shared-memory ,让连接数据库时先跳过权限验证,即不需要输入密码就能连接数据库

在这里插入图片描述 执行完上述命令之后,注意:这个窗口先别关掉!!!

三、使用管理员权限新开第二个cmd窗口,无密码进入MySQL,并清空密码

安装好MySQL的时候,MySQL就自带了一些数据库,如下图所示,这些数据库用来存储Mysql的用户信息以及其他配置信息。我们这一步的目的就是将MySQL数据库的root用户对应密码清空,这样下次使用root账户连接数据库时就可以不用密码

在这里插入图片描述

使用mysql -u root -p发起数据库连接之后,看到Enter passowrd直接爱搭不理,回车就可以连接MySQL(因为第二步跳过了权限校验)。连接MySQL之后,使用update user set authentication_string='' where user='root';命令将mysql数据库的root用户对应密码清空。 在这里插入图片描述

四、无密码进入MySQL,并重置密码

关闭前面的cmd窗口,退出跳过权限校验模式。管理员权限打开cmd窗口,启动MySQL服务,无需密码连接数据库,并修改密码。

在这里插入图片描述

前面一切顺利,当我要修改密码的时候,又给我报错了,说我密码太简单,开玩笑,“12345678”还简单,算了,只能修改MySQL的规则了

在这里插入图片描述

使用show variables like "%validate%";打开配置信息看看

在这里插入图片描述

发现policy是中等验证的,意味着对密码的要求比较严格

在这里插入图片描述 那用命令set global validate_password.policy=0;就把policy改成低级的吧

在这里插入图片描述

再次执行show variables like "%validate%"; 发现修改完成了

在这里插入图片描述

总算可以修改密码了,开搞

在这里插入图片描述

啊这,又报错,我心态崩了啊。最后在查了其他资料之后,发现了新的修改方法

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '12345678';

泪目,终于修改完成了

在这里插入图片描述 修改完成之后,终于可以正常登录了,又可以开心地写垃圾代码了(*^▽^*)