博客 / Linux/ MySQL root 密码忘记?完整重置指南(更新)

MySQL root 密码忘记?完整重置指南(更新)

重置 MySQL root 密码的完整步骤

当您忘记 MySQL 的 root 密码时,可以通过在服务器上以安全模式启动 MySQL 并绕过授权表来重置密码。此操作需要服务器的 root 或 sudo 权限。请确保在维护时段操作,并暂时阻止应用访问数据库。

步骤一:停止 MySQL 服务

首先,停止正在运行的 MySQL 服务。

sudo systemctl stop mysql
# 或者,对于使用 SysV init 的系统
# sudo service mysql stop

步骤二:以安全模式启动 MySQL

启动 MySQL 服务,并跳过权限验证。这通常通过修改启动参数或配置文件实现。

方法 A:通过命令行启动(推荐)

sudo mysqld_safe --skip-grant-tables --skip-networking &

说明: --skip-networking 参数可防止远程连接,增强安全性。

方法 B:修改配置文件(适用于旧版本)

编辑 MySQL 配置文件(通常是 /etc/mysql/my.cnf/etc/my.cnf)。

sudo vi /etc/mysql/my.cnf

[mysqld] 部分添加以下行:

[mysqld]
skip-grant-tables

保存并退出编辑器,然后启动 MySQL 服务:

sudo systemctl start mysql

步骤三:连接 MySQL 并重置密码

现在,您无需密码即可连接到 MySQL 服务器。

mysql -u root

连接到 MySQL 后,根据您的 MySQL 版本执行相应的 SQL 命令来更新密码。

对于 MySQL 5.7.6 及以上版本:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码';
mysql> FLUSH PRIVILEGES;

对于 MySQL 5.7.5 及更早版本:

mysql> UPDATE mysql.user SET authentication_string = PASSWORD('您的新密码') WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;

注意: 请将 您的新密码 替换为一个强密码。

步骤四:恢复 MySQL 的正常运行模式

重置密码后,必须停止以安全模式运行的 MySQL,并恢复原始配置。

1. 退出 MySQL 客户端:

mysql> quit

2. 停止 MySQL 服务:

sudo systemctl stop mysql
# 或使用 pkill
# sudo pkill mysqld

3. 如果您使用了方法 B(修改配置文件),请编辑配置文件,删除或注释掉之前添加的 skip-grant-tables 行。

sudo vi /etc/mysql/my.cnf
# 将 skip-grant-tables 这行前面加上 # 注释掉
# skip-grant-tables

4. 以正常模式启动 MySQL 服务:

sudo systemctl start mysql

步骤五:验证新密码

使用新设置的密码登录 MySQL,以确认重置成功。

mysql -u root -p

系统会提示您输入新密码,输入后应能成功登录。

故障排除与安全建议

  • 找不到配置文件: 使用 find / -name "my.cnf" 2>/dev/nullmysql --help | grep "Default options" 查找配置文件位置。
  • 权限问题: 确保您使用 sudo 执行所有需要特权的命令。
  • 安全警告: 整个过程应尽快完成。在 skip-grant-tables 模式下,数据库对任何本地用户都是开放的。务必在操作完成后立即恢复。
  • 后续步骤: 重置密码后,建议检查并更新所有使用旧密码的应用程序配置。

通过以上步骤,您应该能够成功重置 MySQL 的 root 密码。如果遇到问题,请检查 MySQL 的错误日志(通常位于 /var/log/mysql/error.log)以获取详细信息。

发表评论

您的邮箱不会公开。必填项已用 * 标注。