当Mysql出现root密码遗忘、权限配置错误导致无法正常登录的情况时,可以通过跳过权限验证的方式临时进入数据库,完成密码重置或权限修复操作。这种操作会绕过Mysql本身的权限校验机制,操作完成后需要及时恢复正常的权限验证流程,避免数据库暴露在安全风险中。

操作前的注意事项
跳过权限操作属于高风险操作,操作前需要确认以下事项:
- 操作前尽量对数据库数据进行备份,避免操作过程中出现数据丢失问题
- 确认当前操作的Mysql服务版本,不同版本的操作细节可能存在差异
- 操作完成后必须及时恢复权限验证,不要长期保持跳过权限的状态
Linux系统下Mysql跳过权限操作步骤
1. 停止Mysql服务
首先需要停止正在运行的Mysql服务,不同Linux发行版的停止命令略有不同:
# 适用于使用systemctl管理的系统 sudo systemctl stop mysqld # 适用于使用service管理的系统 sudo service mysql stop
2. 以跳过权限模式启动Mysql
使用mysqld_safe命令启动时添加--skip-grant-tables参数,跳过权限表加载:
sudo mysqld_safe --skip-grant-tables --skip-networking &
其中--skip-networking参数用于禁止远程连接,进一步提升操作期间的安全性。
3. 无密码登录Mysql并修改权限
此时可以直接无密码登录Mysql,执行权限修改操作:
# 无密码登录Mysql
mysql -u root
# 切换到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;
# 退出Mysql
EXIT;
4. 重启Mysql服务恢复正常模式
先结束跳过权限模式的Mysql进程,再正常启动服务:
# 查找mysqld进程并结束 sudo pkill mysqld # 正常启动Mysql服务 sudo systemctl start mysqld # 或者 sudo service mysql start
Windows系统下Mysql跳过权限操作步骤
1. 停止Mysql服务
打开命令提示符(以管理员身份运行),执行以下命令停止服务:
net stop mysql
如果服务名不是默认的mysql,需要先通过services.msc查看实际的Mysql服务名称。
2. 跳过权限启动Mysql
进入Mysql的安装目录的bin文件夹,执行以下命令:
mysqld --skip-grant-tables
执行后该窗口会保持运行状态,需要另外打开一个新的命令提示符窗口进行操作。
3. 修改密码并刷新权限
在新的命令提示符窗口中执行以下SQL语句:
mysql -u root
USE mysql;
-- 修改密码,根据版本选择对应语句
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- 或者低版本使用
-- UPDATE user SET Password=PASSWORD('new_password') WHERE User='root';
FLUSH PRIVILEGES;
EXIT;
4. 恢复服务正常运行
关闭跳过权限的命令行窗口,然后在管理员命令提示符中重启Mysql服务:
net start mysql
操作后的验证
服务重启完成后,使用新设置的密码尝试登录Mysql,验证是否正常进入:
mysql -u root -p # 输入新设置的密码,验证是否可以正常登录
如果登录成功,说明整个跳过权限操作已经完成,数据库恢复正常的权限验证机制。