mysql忘了root密码是运维和开发中比较常见的尴尬情况。发生这种问题时,数据库本身并没有损坏,只是我们无法通过正常的账号认证进入系统。解决思路是让mysql暂时跳过权限表加载,这样就能在无密码状态下连入并修改root账号的密码。
linux系统下重置mysql root密码
在linux环境中,通常使用systemd或service命令管理mysql。我们可以先停掉运行中的服务,再以跳过授权表的方式启动。
步骤一:停止mysql服务
# 使用systemctl停止服务 sudo systemctl stop mysql # 或者旧版用service # sudo service mysql stop
步骤二:跳过权限表启动mysql
以skip-grant-tables参数启动,可以让mysql不读取用户权限,从而免密登录。
# 后台启动并跳过权限表 sudo mysqld_safe --skip-grant-tables &
步骤三:无密码登录并修改密码
此时直接用mysql命令即可进入,不需要输入密码。进入后执行更新语句。
-- 连接本地mysql
mysql -u root
-- 切换到系统库
USE mysql;
-- 修改root密码,mysql 5.7及以上密码字段为authentication_string
UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root';
-- 如果是mysql 8.0,使用如下语句
-- ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
-- 刷新权限
FLUSH PRIVILEGES;
步骤四:重启正常服务
退出后杀掉跳过权限的进程,再正常启动mysql。
# 结束mysqld_safe进程 sudo killall mysqld # 正常启动 sudo systemctl start mysql
windows系统下重置mysql root密码
windows下操作逻辑类似,只是命令和路径不同。假设mysql安装在C盘。
步骤一:停止服务
net stop mysql
步骤二:跳过权限启动
cd C:Program FilesMySQLMySQL Server 8.0bin mysqld --skip-grant-tables
步骤三:修改密码
另开一个命令行窗口,直接执行mysql进入。
USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; FLUSH PRIVILEGES;
注意事项
- skip-grant-tables模式下任何用户都能免密连入,操作时要确保环境安全,避免被他人乘机入侵。
- 修改密码后必须执行FLUSH PRIVILEGES,否则权限不会生效。
- mysql 8.0废弃了PASSWORD()函数,应使用ALTER USER语句设置密码。
通过上述方法,mysql忘了root密码怎么解决就非常清晰了。只要按照对应系统的步骤操作,几分钟内就能重新获得数据库管理权限,不必重新安装实例丢失数据。