MySQL 忘记 root 密码重置教程(Windows + Linux,区分 5.7 / 8.0)

MySQL 忘记 root 密码重置教程(Windows + Linux,区分 5.7 / 8.0)

核心原理:停止 MySQL → 跳过权限验证启动 → 无密码登录重置密码 → 正常重启服务

一、Windows 系统(管理员 CMD/PowerShell 执行)

步骤 1:停止 MySQL 服务

# 查看服务名:services.msc 一般是 MySQL80 / MySQL57 net stop MySQL80

步骤 2:跳过权限 + 禁用外网(安全)启动 MySQL

  1. 进入 MySQL 安装的bin目录(示例)
cd C:\Program Files\MySQL\MySQL Server 8.0\bin
  1. 执行命令,当前窗口不要关闭
mysqld --console --skip-grant-tables --skip-networking

步骤 3:新开管理员 CMD,无密码登录 MySQL

mysql -u root

步骤 4:重置密码(版本命令不同)

MySQL 8.0+(推荐)
-- 先刷新权限,必须执行 FLUSH PRIVILEGES; -- 设置新密码 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码123456';
MySQL 5.7
use mysql; UPDATE mysql.user SET authentication_string=PASSWORD('新密码123456') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;

步骤 5:正常重启服务

  1. 关闭之前运行mysqld的窗口
  2. 启动 MySQL 服务
net start MySQL80
  1. 使用新密码登录:mysql -u root -p

二、Linux 系统(CentOS / Ubuntu)

步骤 1:停止 MySQL 服务

# CentOS/RHEL sudo systemctl stop mysqld # Ubuntu/Debian sudo systemctl stop mysql

步骤 2:安全模式跳过权限启动

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

步骤 3:无密码登录

mysql -u root

步骤 4:重置密码

MySQL8.0
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码123456';
MySQL5.7
use mysql; UPDATE mysql.user SET authentication_string=PASSWORD('新密码123456') WHERE user='root'; FLUSH PRIVILEGES;

步骤 5:重启 MySQL 服务

sudo pkill mysqld sudo systemctl start mysqld

三、常见报错 & 避坑要点

  1. 8.0 直接执行ALTER USER报错原因:跳过权限模式下不能直接改用户,必须先执行FLUSH PRIVILEGES;

  2. 只能本地登录,不能远程连接需要同时授权root@%

ALTER USER 'root'@'%' IDENTIFIED BY '新密码';
  1. 安装 MySQL8.0 首次安装的临时初始密码
# Linux查看临时密码 grep 'temporary password' /var/log/mysqld.log # Windows在安装日志中查找
  1. 密码复杂度报错 设置包含:大小写 + 数字 + 特殊符号,例如:Root@123456

四、备用方案:my.ini/my.cnf 配置文件临时跳过权限

  1. [mysqld]下添加一行:
skip-grant-tables
  1. 重启 MySQL,无密码登录改密码
  2. 改完务必删除这一行,否则所有人免密登录,极度危险