MySQL忘记root密码重置(Linux环境)

前言

做运维或者开发的同学肯定遇到过这种情况:服务器上的MySQL数据库用了很久,突然有一天忘记了root密码,登录不进去了。这时候项目可能正在运行,不能随便重装数据库,那怎么办呢?

别慌,MySQL提供了一种跳过权限验证的启动方式,我们可以用这种方式登录进去,然后重置root密码。这篇文章就详细讲讲在Linux环境下怎么重置MySQL的root密码。

操作步骤

1. 先停止MySQL服务

首先我们需要把正在运行的MySQL服务停掉:

systemctl stop mysqld

如果你用的是MariaDB,命令是:

systemctl stop mariadb

执行完之后可以检查一下MySQL是不是真的停了:

ps aux | grep mysql

如果没有看到mysql进程,说明已经停掉了。

2. 跳过权限验证启动MySQL

接下来我们要用 --skip-grant-tables 参数启动MySQL,这样启动之后就可以不用密码直接登录了。

mysqld_safe --skip-grant-tables &

注意最后面的 & 符号,这个是让MySQL在后台运行。

执行完这个命令之后,等个几秒钟,让MySQL完全启动起来。

3. 无密码登录MySQL

现在我们就可以不用密码直接登录MySQL了:

mysql -u root

执行完之后直接就进入MySQL命令行界面了,不需要输入密码。

4. 修改root密码

登录进去之后,我们就可以修改root密码了。

首先选择mysql数据库:

USE mysql;

然后修改root密码。注意不同版本的MySQL,修改密码的语句不一样:

MySQL 5.7版本:

UPDATE user SET authentication_string=PASSWORD('你的新密码') WHERE User='root';

MySQL 8.0版本:

ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

修改完密码之后,一定要执行一下刷新权限的命令:

FLUSH PRIVILEGES;

然后退出MySQL:

EXIT;

5. 关闭跳过权限的MySQL进程,正常重启MySQL

现在我们需要把刚才用跳过权限方式启动的MySQL进程关掉,然后用正常方式重启。

先找到MySQL的进程ID:

ps aux | grep mysqld_safe

然后杀掉这个进程:

kill -9 进程ID

等个几秒钟,让MySQL完全关闭。然后用正常方式启动MySQL:

systemctl start mysqld

6. 验证新密码能不能登录

最后我们来验证一下新密码能不能正常登录:

mysql -u root -p

输入你刚才设置的新密码,如果能正常登录进去,说明密码重置成功了。

常见坑

坑1:修改密码之后忘了执行FLUSH PRIVILEGES

很多同学修改完密码之后直接就退出了,结果发现重启MySQL之后密码还是不对。这是因为修改完密码之后一定要执行 FLUSH PRIVILEGES 刷新权限,不然修改不会生效。

坑2:MySQL版本不一样,修改密码的语句不一样

很多同学抄网上的教程,结果修改密码的语句不对,报错了。这是因为MySQL 5.7和MySQL 8.0修改密码的方式不一样。5.7用的是 authentication_string 字段,8.0用的是 ALTER USER 语句。

你可以先执行一下这个命令看看你的MySQL版本:

SELECT VERSION();

然后用对应的语句修改密码。

坑3:跳过权限启动的时候没加 & 符号

如果执行 mysqld_safe --skip-grant-tables 的时候没加 & 符号,那这个命令就会一直占着你的终端窗口,你没法继续操作了。所以一定要记得在最后面加个 & 符号,让它在后台运行。

坑4:杀进程的时候杀错了

杀进程的时候一定要看清楚,不要把其他无关的进程杀掉了。最好先 ps aux | grep mysqld 看一下,确认哪个是我们刚才启动的跳过权限的MySQL进程。

总结

Linux环境下重置MySQL root密码的步骤总结一下:

  1. 停止MySQL服务
  2. 用 --skip-grant-tables 参数跳过权限启动
  3. 无密码登录MySQL
  4. 修改root密码
  5. 刷新权限
  6. 关闭跳过权限的进程,正常重启MySQL
  7. 用新密码验证登录

记住这几个步骤,以后忘记root密码的时候就不用慌了,按照这个流程操作就能搞定。

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-5 08:31