Windows下Mysql8.0版本忘记密码的解决方案
Windows下Mysql8.0及其以上版本root账户忘记密码的解决方案,以及常见报错处理。
总流程:
停止服务 -> 安全模式 -> 免密登录mysql -> 重置密码为空 -> 退出安全模式并启动mysql服务 -> 登录mysql并修改密码为自定义密码 -> 结束
停止服务:
# 停止mysql服务
net stop mysql先打开CMD窗口注意以管理员方式运行,不然可能权限不够,运行上面的指令停止你的Mysql服务,运行后如果出现提示“服务已成功停止”,请看第二步'设置安全模式'。
“服务名无效”:
输入stop命令后提示服务器名无效,这意味你的Mysql服务不叫这个名字,若你忘记了服务器名也没关系,你可以使用下面的指令查找你的服务器名,在停止,比如下面的示例中我的Mysql服务器名是“MySQL80”,大小写无需区分。
# 查找mysql服务
sc query | findstr /I mysql
### 输出提示
# SERVICE_NAME: MySQL80
# DISPLAY_NAME: MySQL80
# 停止mysql服务
net stop mysql80"拒绝访问":如果提示“发生系统错误 5 拒绝访问” 这代表你的权限不够,使用管理员的方式运行CMD在此输入即可。
设置安全模式:
安全模式能让我们免密登录数据库,首先输入sc qc MySQL80,mysql80是你的服务器名,不记得了就看上一步,这一步是查找mysql的路径,在输出的内容中找到“BINARY_PATH_NAME”,这个就是路径。我们复制到\bin\这里即可(图中红框所示),在输入cd 你的路径
# 步骤一 查找mysql路径
sc qc MySQL80
# 步骤二 进入mysql的bin目录下
cd C:\Program Files\MySQL\MySQL Server 8.0\bin\
在进入bin目录后执行步骤三,注意:在输入完命令后,没任何内容输出即代表成功,此时千万不要关闭这个窗口。
# 步骤三 设置mysql为安全模式
mysqld –console –skip-grant-tables –shared-memory“数据目录异常”:
如你的报错中包含“\MySQL\MySQL Server 8.0\ared-memor\”,那么这个错误通常发生在你在初始化Mysql时或之后你迁移了用于存储数据的Data目录文件所引发的错误,此时你将指令变更为下方的解决方案一栏中的指令即可,注意将 --datadir="路径"中的路径替换为你的Data目录。
# 具体错误内容
[Warning] [MY-011070] [Server] 'Enabling symbolic using --symbolic-links/-s (or equivalent)' is deprecated and will be removed in a future release.
[Warning] [MY-011070] [Server] 'Enabling symbolic using --symbolic-links/-s (or equivalent)' is deprecated and will be removed in a future release.
[System] [MY-010116] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe (mysqld 8.0.43) starting as process 31200
[Warning] [MY-010091] [Server] Can't create test file C:\Program Files\MySQL\MySQL Server 8.0\ared-memor\mysqld_tmp_file_case_insensitive_test.lower-test
[Warning] [MY-010091] [Server] Can't create test file C:\Program Files\MySQL\MySQL Server 8.0\ared-memor\mysqld_tmp_file_case_insensitive_test.lower-test
[ERROR] [MY-013276] [Server] Failed to set datadir to 'C:\Program Files\MySQL\MySQL Server 8.0\ared-memor\' (OS errno: 2 - No such file or directory)
[ERROR] [MY-010119] [Server] Aborting
[System] [MY-010910] [Server] C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe: Shutdown complete (mysqld 8.0.43) MySQL Community Server - GPL.# 解决方案 输入下发指令,注意将里面的路径变更为你的实际Data路径。
mysqld.exe --skip-grant-tables --shared-memory --datadir="C:\ProgramData\MySQL\MySQL Server 8.0\Data"登录Mysql:
在执行完安全模式成功后,不要关闭那个窗口,此时我们另起一个cmd窗口,并进入Mysql的bin目录下,执行下方的指令完成登录,出现“mysql>”代表登录成功
# 在bin目录下进行登录,注意-p后面是空的
mysql -u root -p
# 如果提示输入密码,即Enter password,无需输入直接按下回车即可,出现mysql>则代表登录成功。
设置密码为空:
在登录完mysql后,依次执行下方指令,完成重置密码为空,注意这里Mysql8.0后用户密码的验证机制变更所以这里直接修改密码可能导致不成功,所以需要先将密码设置为空,在重启服务,然后再修改密码。
# 进入mysql库
use mysql;
# 设置密码为空
update user set authentication_string = '' where user = 'root';
# 输出这个就代表成功了 Query OK, 1 row affected (0.01 sec)
# 退出mysql
quit;
重置密码:
在退出mysql后,直接关闭着两个CMD窗口,然后重新打开一个CMD窗口,注意用管理员方式打开,然后再次进入mysql的bin目录下,然后依次执行下方的指令完成密码重置和启动服务。
# 启动mysql,提示MySQL80 服务已经启动成功则代表启动完成
net start mysql80
# 登录mysql,提示输入密码直接回车即可
mysql -u root -p
# 进入mysql库
use mysql;
# 修改密码,提示Query OK则代表修改成功。
alter user 'root'@'localhost' identified by '新密码';
# 退出mysql
quit;到这里密码就修改完成了,此时我们就可以使用新密码完成登录了。

