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

前言

忘记MySQL root密码是常见问题,不用慌,本文教你一步步重置。

重置步骤

第一步:停止MySQL服务

systemctl stop mysqld

第二步:以跳过权限模式启动

mysqld_safe --skip-grant-tables &

或者用这个方式:

systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"
systemctl start mysqld

第三步:无密码登录MySQL

mysql -u root

现在不需要密码就能直接进了。

第四步:修改密码

-- 刷新权限
FLUSH PRIVILEGES;

-- 修改密码(MySQL 5.7)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

-- 如果上面不行,用这个
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root' AND Host='localhost';

-- 刷新权限
FLUSH PRIVILEGES;

第五步:退出,正常重启MySQL

exit
systemctl stop mysqld
systemctl start mysqld

第六步:用新密码登录测试

mysql -u root -p

输入新密码,能进去就成功了。

常见坑

坑1:MySQL 8.0和5.7语法不一样

MySQL 8.0 不能用 PASSWORD() 函数了。

解决: 用 ALTER USER 语句。

坑2:skip-grant-tables没生效

启动后还是要密码。

原因: 可能MySQL已经在跑了,新启动的没生效。

解决: 先彻底停掉MySQL:

systemctl stop mysqld
pkill -9 mysqld

再重新启动。

坑3:改完密码忘记FLUSH PRIVILEGES

改完密码直接退出,结果还是不能用新密码登录。

解决: 改完密码一定要执行 FLUSH PRIVILEGES;

坑4:远程登录还是不行

本地改完密码,远程连接还是连不上。

原因: root用户只允许本地登录。

解决: 需要单独授权远程登录:

CREATE USER 'root'@'%' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

总结

六步重置root密码:

  1. 停MySQL
  2. 跳过权限启动
  3. 无密码登录
  4. 改密码
  5. 正常重启
  6. 测试登录

记住: 改完密码一定要 FLUSH PRIVILEGES;

遇到问题加QQ23979811 协助处理


emer 发布于  2026-10-8 07:34 

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 
'); })();