核心原理:停止 MySQL → 跳过权限验证启动 → 无密码登录重置密码 → 正常重启服务
一、Windows 系统(管理员 CMD/PowerShell 执行)
步骤 1:停止 MySQL 服务
# 查看服务名:services.msc 一般是 MySQL80 / MySQL57 net stop MySQL80步骤 2:跳过权限 + 禁用外网(安全)启动 MySQL
- 进入 MySQL 安装的
bin目录(示例)
cd C:\Program Files\MySQL\MySQL Server 8.0\bin- 执行命令,当前窗口不要关闭
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:正常重启服务
- 关闭之前运行
mysqld的窗口 - 启动 MySQL 服务
net start MySQL80- 使用新密码登录:
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三、常见报错 & 避坑要点
8.0 直接执行
ALTER USER报错原因:跳过权限模式下不能直接改用户,必须先执行FLUSH PRIVILEGES;只能本地登录,不能远程连接需要同时授权
root@%:
ALTER USER 'root'@'%' IDENTIFIED BY '新密码';- 安装 MySQL8.0 首次安装的临时初始密码
# Linux查看临时密码 grep 'temporary password' /var/log/mysqld.log # Windows在安装日志中查找- 密码复杂度报错 设置包含:大小写 + 数字 + 特殊符号,例如:
Root@123456
四、备用方案:my.ini/my.cnf 配置文件临时跳过权限
- 在
[mysqld]下添加一行:
skip-grant-tables- 重启 MySQL,无密码登录改密码
- 改完务必删除这一行,否则所有人免密登录,极度危险