mysql的root账户是数据库的最高权限账户,当忘记该账户的密码时,会无法登录数据库进行任何管理操作,此时需要通过特定的流程重置密码。不同操作系统的mysql重置密码步骤略有差异,下面分别介绍windows和linux系统下的操作方法。

windows系统下重置mysql root密码
步骤1:停止mysql服务
首先打开命令提示符,以管理员身份运行,执行以下命令停止mysql服务:
net stop mysql
如果服务名不是默认的mysql,需要替换为实际的服务名称,可以通过services.msc查看所有服务名称。
步骤2:跳过权限表启动mysql
切换到mysql的安装目录下的bin文件夹,执行以下命令启动mysql并跳过权限验证:
mysqld --skip-grant-tables
执行该命令后,当前命令提示符窗口会处于挂起状态,不要关闭这个窗口,重新打开一个新的管理员命令提示符窗口。
步骤3:无密码登录并修改密码
在新的命令提示符窗口中,切换到mysql的bin目录,执行以下命令无密码登录mysql:
mysql -u root
登录成功后,依次执行以下sql语句修改root密码:
-- 切换到mysql系统数据库
USE mysql;
-- 修改root用户的密码,mysql 5.7及以上版本密码字段为authentication_string
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出mysql
EXIT;
如果是mysql 5.6及以下版本,密码字段为password,需要将上面的UPDATE语句替换为:
UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
步骤4:重启mysql服务
关闭之前跳过权限表启动的mysql窗口,然后在命令提示符中执行以下命令启动mysql服务:
net start mysql
之后就可以使用新设置的密码登录mysql了。
linux系统下重置mysql root密码
步骤1:停止mysql服务
使用以下命令停止mysql服务,不同linux发行版的命令可能略有不同:
# centos/redhat系统 systemctl stop mysqld # ubuntu/debian系统 systemctl stop mysql
步骤2:跳过权限表启动mysql
执行以下命令以跳过权限表的方式启动mysql:
mysqld_safe --skip-grant-tables &
命令末尾的&表示后台运行,执行后不要关闭当前终端。
步骤3:无密码登录并修改密码
打开新的终端窗口,执行以下命令无密码登录mysql:
mysql -u root
登录后执行以下sql语句修改密码:
-- 切换到mysql系统数据库
USE mysql;
-- 修改root密码,mysql 5.7及以上版本
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- mysql 5.6及以下版本使用以下语句
-- UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
EXIT;
步骤4:重启mysql服务
回到之前的终端,执行以下命令关闭后台运行的mysql进程,然后重启服务:
# 查找mysqld进程 ps -ef | grep mysqld # 杀死对应进程,pid为查找到的mysqld进程号 kill -9 pid # 重启服务 systemctl start mysqld # 或者 systemctl start mysql
注意事项
- 重置密码过程中跳过权限表启动mysql时,数据库处于无权限验证状态,任何其他用户都可以无密码登录,因此操作期间要确保数据库服务器不被其他无关人员访问,避免数据安全风险。
- 新设置的密码建议包含大小写字母、数字和特殊字符,长度不低于8位,提升账户安全性。
- 密码修改完成后一定要执行
FLUSH PRIVILEGES语句刷新权限,否则修改不会生效。 - 如果修改密码后仍然无法登录,可以检查mysql的用户表中root用户的主机字段是否正确,默认root用户的主机为
localhost,如果是远程登录需要对应修改主机的权限。
密码验证
重置完成后,执行以下命令验证新密码是否生效:
mysql -u root -p
输入新设置的密码,如果能够成功登录mysql,说明密码重置完成。
mysqlroot密码重置数据库安全skip_grant_tables修改时间:2026-07-01 00:42:28