← 返回

Windows上重置MySQL密码

复制为 Markdown

在 Windows 电脑上,安装的 MySQL 经常会因为忘记密码而无法执行建表、改权限等操作。下面是在 Windows 本机使用管理员权限重置 MySQL root 密码的过程。

背景

在 cmd 终端输入 mysql -uroot -p 接密码显示:

这说明 MySQL 运行正常,但是因为密码错误登录不进去。

停止 MySQL 服务

自动运行的 mysql 服务默认需要打开密码校验,在本机重置密码的核心原理是起一个跳过权限校验的 mysql 服务,然后重置密码。因此需要将当前运行的打开权限校验的 mysql 服务先停掉,密码重置完成之后再打开。

输入 win+R

在弹出的对话框中输入 services.msc,找到 mysql 运行的服务,将其关闭。

服务名称取决的你的 MySQL 版本和当时安装的 MySQL 时选择的的配置,一般以 mysqlmysql80 比较常见。

跳过权限表启动 MySQL 服务

这一步需要先确认 mysql 的安装位置,这里假设能找到安装位置且位置在 C 盘目录:

bash
# mysql 安装目录,对应你自己的
C:\Program Files\MySQL\MySQL Server 8.0\bin

确认完安装位置之后,还需要找到 mysql 配置文件中的 datadir 的位置,我们重置的密码要生效,就得存在和原先老密码一样的位置并替换掉老密码,因此找到这里的 datadir 目录至关重要。

datadir 的完整地址配置 MySQL 的配置文件 my.ini 中,my.ini 文件通常位于 C:\ProgramData\MySQL\MySQL Server 8.0\。注意 ProgramData 是隐藏文件夹,需要在文件资源管理器地址栏输入 C:\ProgramData 才能看到。

用记事本等文本编辑器打开 my.ini 文件,搜索 datadir 即可拿到完整的数据文件地址。这里假设 datadir=C:/ProgramData/MySQL/MySQL Server 8.0/Data (通常,数据文件位置也就是这里)。

下面跳过权限表启动 mysql 服务

bash
# 首先以管理员权限打开终端

# 进入 mysql 安装位置的 bin 目录,替换为实际的目录位置
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"

# 跳过权限表启动 mysql 服务,-datadir 后端替换为实际的数据目录
mysqld --skip-grant-tables --datadir="C:/ProgramData/MySQL/MySQL Server 8.0/Data" --shared-memory --console

执行完成之后,如果终端没有异常退出且输出类似于 “ready for connections” 的信息,即表示 mysql 启动成功。

不要关闭此终端,保持运行。

重置密码

新开一个终端,可以不必以管理员运行。执行重置密码命令:

mysql
-- 刷新权限表,确保后续操作生效
FLUSH PRIVILEGES;

-- 选择 mysql 系统数据库
USE mysql;

-- 重置 root@localhost 用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword';

-- 退出 MySQL 客户端
EXIT;

然后转到刚才以管理员运行的终端,Ctrl+C 终止 mysql 服务。

再到 services.msc 里面手动启动正常的 mysql 服务即可。

最热文章