0%

MySQL忘记密码

MySQL 忘记密码解决方案:重置密码的完整步骤

忘记 MySQL 密码是常见问题,可通过跳过权限验证的方式重置密码。以下是针对不同操作系统的详细步骤,以及密码策略的调整方法。

通用重置步骤(以 MySQL 8.0 为例)

停止 MySQL 服务

首先确保 MySQL 服务已停止,否则无法进行后续操作:

1
2
3
4
5
# Linux/Mac 系统
sudo systemctl stop mysql # 或 mysql.server stop(取决于安装方式)

# Windows 系统(管理员命令提示符)
net stop mysql

跳过权限验证启动 MySQL

以跳过权限表的方式启动 MySQL,此时登录无需密码:

1
2
3
4
5
# Linux/Mac 系统(后台启动,日志输出到文件)
sudo mysqld --skip-grant-tables --user=mysql > /dev/null 2>&1 &

# Windows 系统(需切换到 MySQL 的 bin 目录,如 D:\mysql-8.0\bin)
mysqld --skip-grant-tables

注意

  • 执行此命令时,确保 MySQL 服务已完全停止,否则会提示 “端口被占用”。
  • 该模式下 MySQL 安全性极低,重置密码后需立即关闭并重启服务。

无密码登录 MySQL

新开一个终端 / 命令提示符窗口,直接登录 MySQL(无需输入密码):

1
mysql -u root  # 直接回车,无需输入密码

刷新权限并重置密码

登录后,需先刷新权限表,再修改 root 密码:

1
2
3
4
5
6
7
8
-- 刷新权限(必须执行,否则可能无法修改密码)
FLUSH PRIVILEGES;

-- 重置密码(MySQL 8.0 及以上版本使用 ALTER USER)
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
-- 刷新系统权限相关表
FLUSH PRIVILEGES;
-- 若提示“Unknown system variable 'validate_password_policy'”,说明密码不符合策略,需先调整策略(见下文)

重启 MySQL 服务

密码修改完成后,关闭所有 MySQL 进程,再正常启动服务:

1
2
3
4
5
6
7
# Linux/Mac 系统
sudo pkill mysqld # 终止所有 MySQL 进程
sudo systemctl start mysql # 正常启动服务

# Windows 系统
# 先在任务管理器结束 mysqld 进程,再执行:
net start mysql

验证新密码

使用新密码登录,确认重置成功:

1
mysql -u root -p  # 输入新密码,成功登录则表示重置完成

密码策略调整(解决密码不符合要求的问题)

MySQL 5.7+ 引入了密码强度验证插件(validate_password),默认要求密码包含大小写字母、数字和特殊字符,长度至少 8 位。若需设置简单密码(如 123456),需先调整策略:

查看当前密码策略

1
SHOW VARIABLES LIKE 'validate_password%';

输出类似:

1
2
3
4
5
6
7
8
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.length | 8 | # 密码最小长度
| validate_password.policy | MEDIUM | # 策略等级(LOW/MEDIUM/STRONG)
| validate_password.special_char_count | 1 | # 至少包含1个特殊字符
| ... | ... |
+--------------------------------------+--------+

调整密码策略(仅临时生效,重启后需重新设置)

1
2
3
4
5
6
7
8
9
10
-- 设置密码强度为 LOW(只验证长度)
set global validate_password.policy=LOW;

-- 设置密码最小长度为 6
set global validate_password.length=6;

-- (可选)减少特殊字符/数字/大小写要求
set global validate_password.special_char_count=0; # 不要求特殊字符
set global validate_password.number_count=0; # 不要求数字
set global validate_password.mixed_case_count=0; # 不要求大小写混合

调整后,即可设置简单密码(如 123456)。

不同操作系统的注意事项

1. Linux 系统

  • 若使用 systemctl 管理服务,需确保 mysqld 进程完全终止(可通过 ps -ef | grep mysql 查看)。
  • 跳过权限启动时,若提示 “无法创建文件”,需检查 mysql 用户对数据目录(如 /var/lib/mysql)的权限。

2. Mac 系统(Homebrew 安装)

  • 停止服务:brew services stop mysql
  • 跳过权限启动:sudo mysqld_safe --skip-grant-tablesmysqld_safe 更安全,会自动处理权限)

3. Windows 系统

  • 需以管理员身份运行命令提示符。
  • 若 MySQL 未注册为服务,需切换到 bin 目录手动启动(如 D:\mysql-8.0\bin\mysqld --skip-grant-tables)。

安全建议

  1. 重置密码后,立即关闭 --skip-grant-tables 模式,避免安全风险。
  2. 生产环境中,建议使用强密码(符合 MEDIUMSTRONG 策略),并定期更换。
  3. 若频繁忘记密码,可将密码存储在安全的密码管理器中

欢迎关注我的其它发布渠道