Mysql忘记密码重置的方法

步骤

复制代码
管理员身份运行cmd

1. net stop mysql
2. mysqld --defaults-file="E:\work\mysql-5.7.39-winx64\my.ini" --skip-grant-tables
3. mysql -u root
4. FLUSH PRIVILEGES;
   
先查看用户root对应的host信息,动态修改下述命令中@符号后的内容
	use mysql;
	select user, host from user;
	
1. ALTER USER 'root'@'%' IDENTIFIED BY 'root';
2. EXIT;
3. net stop mysql
4. net start mysql

逐行命令详解

1. 管理员身份运行 cmd

  • 作用:Windows 系统中,修改 MySQL 服务和配置需要系统级权限,普通用户权限可能无法启停服务或操作 MySQL 核心配置,因此必须右键点击 "命令提示符"→选择 "以管理员身份运行"
  • 注意 :如果不使用管理员身份,执行net stop/start mysql会提示 "拒绝访问"

2. net stop mysql

  • 命令类型:Windows 系统命令(不是 MySQL 命令)。

  • 作用:停止 MySQL 服务

    • net:Windows 的网络服务管理命令
    • stop:停止服务的参数
    • mysql:MySQL 服务的名称(如果你的 MySQL 服务名不是默认的mysql,比如mysql57,需要替换成实际名称,可通过services.msc查看)
  • 执行结果:成功则提示 "MySQL 服务已成功停止",失败可能是服务未启动或权限不足。

3. mysqld --defaults-file="E:\work\mysql-5.7.39-winx64\my.ini" --skip-grant-tables

  • 命令类型:MySQL 服务器启动命令(mysqld 是 MySQL 的核心服务进程)

  • 核心参数解释

    • --defaults-file:指定 MySQL 的配置文件路径(必须是绝对路径),告诉 mysqld 加载哪个配置文件启动
    • --skip-grant-tables关键参数,跳过 MySQL 的权限验证表(grant tables),启动后任何用户都可以无密码登录 MySQL,且拥有最高权限(这是重置密码的核心前提)
  • 执行现象 :执行后 cmd 窗口会 "卡住"(没有返回提示符),这是正常的 ------ 因为 mysqld 进程正在前台运行,这个窗口不能关闭,需要重新打开一个新的管理员 cmd 窗口执行后续命令

  • 注意 :路径中的my.ini必须是你实际的 MySQL 配置文件路径,路径中的引号是为了防止路径包含空格导致识别失败

4. mysql -u root

  • 命令类型:MySQL 客户端登录命令。

  • 作用 :以 root 用户无密码登录 MySQL 服务器(因为前面加了--skip-grant-tables,所以不需要加-p输入密码)

    • -u root:指定登录的用户名是 root
  • 执行结果 :成功则进入 MySQL 的命令行交互界面(提示符变为mysql>),失败可能是 mysqld 进程未启动或端口被占用

5. FLUSH PRIVILEGES;

  • 命令类型:MySQL 内置命令(必须以分号结尾)

  • 作用:重新加载 MySQL 的权限表(grant tables)

    • 因为前面跳过了权限验证,此时直接修改用户密码可能不生效,执行该命令后,MySQL 会重新读取权限配置,让后续的密码修改命令生效
  • 注意:这一步是必做的,否则修改密码的命令会提示 "ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement"

6. 查看 root 用户的 host 信息(关键前置步骤)

复制代码
use mysql;
select user, host from user;
  • use mysql; :切换到 MySQL 的系统数据库mysql(该数据库存储了所有用户、权限相关的核心表)

  • select user, host from user; :查询mysql.user表(用户权限表)中的user(用户名)和host(允许登录的主机)字段

  • 核心意义

    • host字段决定了 root 用户允许从哪个主机登录:

      • %:允许所有主机登录
      • localhost:仅允许本机登录
      • 192.168.1.%:允许指定网段登录
    • 必须确保后续修改密码的命令中@后的内容和查询结果一致,否则会修改失败(比如查询结果是root@localhost,却用root@%修改,会提示用户不存在)

7. ALTER USER 'root'@'%' IDENTIFIED BY 'root';
  • 命令类型:MySQL 用户密码修改命令

  • 作用:修改指定用户的登录密码

    • 'root'@'%':指定要修改的用户是 "root",允许登录的主机是 "%"(需替换为你查询到的实际 host 值)
    • IDENTIFIED BY 'root':将该用户的密码设置为root(可替换为你想要的任意密码)
  • 替代方案(兼容 MySQL 5.6 及更低版本):如果该命令提示报错,可使用旧版命令:

    复制代码
    UPDATE mysql.user SET authentication_string = PASSWORD('root') WHERE user = 'root' AND host = '%';
  • 注意 :分号必须加,且@后的 host 值必须和查询结果完全一致

8. EXIT;

  • 命令类型:MySQL 客户端退出命令
  • 作用:退出 MySQL 的命令行交互界面,回到 cmd 窗口

9. net stop mysql

  • 作用 :停止当前以--skip-grant-tables启动的 MySQL 进程(注意:需要在原来启动 mysqld 的 cmd 窗口按Ctrl+C终止进程,再执行该命令,确保服务完全停止)

10. net start mysql

  • 作用:以正常模式(加载权限表)重新启动 MySQL 服务
  • 验证 :启动后可执行mysql -u root -p,输入新设置的密码(如root),如果能登录则说明密码修改成功

关键注意事项

  1. 执行mysqld --skip-grant-tables的 cmd 窗口不能关闭,否则 MySQL 服务会终止
  2. 如果 MySQL 服务名不是默认的mysql,需替换net stop/start后的服务名(可通过sc query | findstr mysql查询)
  3. 修改密码后,一定要以正常模式重启 MySQL,否则会一直处于无权限验证的危险状态

总结

  1. 核心逻辑:停止 MySQL→跳过权限验证启动→无密码登录→刷新权限→修改 root 密码→恢复正常启动
  2. --skip-grant-tables是重置密码的核心,FLUSH PRIVILEGES是让密码修改生效的关键
  3. root@%中的%必须匹配查询到的host值,否则修改密码会失败
相关推荐
YM52e1 小时前
鸿蒙Flutter Center居中组件:Align对齐详解
android·学习·flutter·华为·harmonyos·鸿蒙
蓝田~1 小时前
MySQL慢查询怎么优化?B+Tree索引原理+MVCC读不阻塞写+EXPLAIN执行计划,从5秒到0.05秒
数据库·mysql
Herbert_hwt1 小时前
MySQL学习前言:关于MySQL的历史与当下学习的必要性
mysql
时间的拾荒人2 小时前
MySQL 视图详解
android·数据库·mysql
祉猷并茂,雯华若锦3 小时前
Appium 3.x安卓按键与通知栏操作全指南
android·appium
尽兴-3 小时前
企业数据库选型与演进:Oracle、达梦、MySQL 与分库分表实践
数据库·mysql·oracle·分库分表
码农coding3 小时前
android 12 SurfaceFlinger开机启动分析
android
hunterandroid3 小时前
Paging 3 RemoteMediator 实战:构建离线优先的分页列表
android·前端
码农coding4 小时前
android12 开机启动PMS
android
Days20504 小时前
GPT-Image-2 国风美学人设生成提示词分享
android·gpt