MySQL忘记root密码是数据库运维和开发中常见的问题,不同操作系统下的重置逻辑略有差异,但核心思路都是先跳过权限验证启动服务,再修改密码后恢复正常启动。下面分别介绍Windows和Linux系统下的具体操作步骤。

Windows系统下重置MySQL root密码
步骤1:停止MySQL服务
首先打开命令提示符,执行以下命令停止正在运行的MySQL服务:
net stop mysql
如果你的MySQL服务名不是默认的mysql,可以通过services.msc查看实际的服务名称,替换上述命令中的mysql即可。
步骤2:跳过权限验证启动MySQL
切换到MySQL的安装目录下的bin文件夹,执行以下命令启动MySQL服务,跳过权限验证:
mysqld --console --skip-grant-tables --shared-memory
执行后该窗口会保持运行状态,不要关闭这个窗口,重新打开一个新的命令提示符窗口进行后续操作。
步骤3:无密码登录并修改root密码
在新的命令提示符窗口中,切换到MySQL的bin目录,执行以下命令无密码登录MySQL:
mysql -u root
登录成功后,依次执行以下SQL语句修改root密码:
-- 切换到mysql系统数据库
USE mysql;
-- 修改root用户的密码,注意MySQL版本不同密码字段可能不同
-- MySQL 5.7及以上版本密码字段为authentication_string
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- MySQL 5.6及以下版本密码字段为password,使用以下语句
-- UPDATE user SET password=PASSWORD('new_password') WHERE User='root';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;
步骤4:恢复正常启动MySQL服务
关闭之前跳过权限验证的命令行窗口,然后执行以下命令启动正常的MySQL服务:
net start mysql
此时使用新设置的密码即可正常登录MySQL。
Linux系统下重置MySQL root密码
步骤1:停止MySQL服务
使用以下命令停止MySQL服务,不同Linux发行版的命令可能略有差异:
# Ubuntu/Debian系统 sudo systemctl stop mysql # CentOS/RHEL系统 sudo systemctl stop mysqld
步骤2:跳过权限验证启动MySQL
执行以下命令以跳过权限验证的方式启动MySQL:
sudo mysqld_safe --skip-grant-tables &
执行后MySQL会在后台运行,同样不要关闭当前终端,新开一个终端进行后续操作。
步骤3:无密码登录并修改密码
新开终端后执行以下命令无密码登录MySQL:
mysql -u root
登录后执行和Windows系统相同的SQL语句修改密码,注意根据实际MySQL版本选择对应的密码字段:
USE mysql;
-- 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进程,然后正常启动服务:
# 结束进程 sudo killall mysqld # 启动正常服务 # Ubuntu/Debian系统 sudo systemctl start mysql # CentOS/RHEL系统 sudo systemctl start mysqld
注意事项
- 操作前建议备份MySQL的数据目录,避免误操作导致数据丢失。
- 修改密码后一定要执行
FLUSH PRIVILEGES语句刷新权限,否则密码修改不会生效。 - 如果MySQL版本是8.0及以上,修改密码的语法有所变化,需要使用以下语句:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';,执行前需要先执行FLUSH PRIVILEGES;。 - 操作完成后确认MySQL服务正常运行,且新密码可以正常登录,再关闭相关终端窗口。