MySQL 忘记 root 密码完整修复教程(适用于 MySQL 5.6)

⚠️ 本教程默认你使用的是 CentOS + systemd 管理 mysqld,MySQL 版本为 5.6.x(也适用于 5.7/8.0,部分语法差异请注意)。


✅ 步骤总览

  1. 停止 mysqld 服务
  2. 以跳过授权表模式启动 MySQL
  3. 使用 SQL 修改 root 密码
  4. 恢复正常启动 MySQL
  5. 验证是否可以登录

🧱 第一步:停止 MySQL 服务

sudo systemctl stop mysqld

如使用 mysql 社区源安装,可能为 mysql 而非 mysqld

sudo systemctl stop mysql

🚪 第二步:跳过权限表启动 MySQL(进入免密模式)

sudo mysqld_safe --skip-grant-tables &

等待几秒(如提示找不到 mysqld_safe,尝试 which mysqld_safe 查路径)


🔐 第三步:用 root 用户进入 MySQL(无密码

mysql -u root

🔄 第四步:重置 root 密码

✅ 方式 A:MySQL 5.6

UPDATE mysql.user SET password = PASSWORD('YourNewPassword') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

✅ 方式 B:MySQL 5.7+

UPDATE mysql.user SET authentication_string = PASSWORD('YourNewPassword') WHERE user = 'root' AND host = 'localhost';
FLUSH PRIVILEGES;

🔁 第五步:重启 MySQL 回正常模式

关闭跳过权限表的 MySQL:

sudo pkill -f mysqld

或(视系统而定):

sudo killall mysqld_safe

然后正常启动:

sudo systemctl start mysqld

🔑 第六步:验证登录

mysql -u root -p
# 输入你刚设置的新密码

如果正常进入,则恢复成功 ✅


🧹 可选:确认配置文件中没有残留 skip-grant-tables

确保你没有在配置文件中永久跳过权限表:

sudo grep skip-grant-tables /etc/my.cnf /etc/my.cnf.d/* 2>/dev/null

如果有以下配置,务必手动删除或注释掉:

[mysqld]
skip-grant-tables

否则每次启动 MySQL 都会绕过密码验证,极不安全!


📌 补充建议

  • 若你不想修改 root,可以通过提权已有用户(如 WordPress 用的 xxx):
    • UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'xxx'; FLUSH PRIVILEGES;
  • 若你之后不使用 root,建议禁用远程登录:
    • UPDATE mysql.user SET Host='localhost' WHERE User='root';

已发布

分类

来自

标签:

评论

发表回复

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