MySQL 8.0/8.4 忘记 root 密码重置教程(Windows 系统)

以下是基于官方方法和实际操作验证的完整教程,用于备份数据并重置 MySQL root 密码。适用于 MySQL 8.0 及 8.4 版本(包括 8.0.32 及更新版本,如最新 8.0.43;8.4.6 LTS)。 安装路径为 C:\Program Files\MySQL\MySQL Server 8.0,数据目录为 C:\ProgramData\MySQL\MySQL Server 8.0\Data,服务名为 MYSQL80。请确保以管理员身份运行命令提示符(CMD)。整个过程需谨慎操作,如果数据重要,建议备份后测试。
重要注意

  • 操作前备份数据,以防意外。
  • 重置后,立即更新密码并确保安全(示例中使用 ‘123456’,请替换为强密码)。
  • 如果遇到错误,检查日志文件(数据目录下的 .err 文件)。
  • 基于 MySQL 官方文档和常见问题解决。此方法兼容默认认证插件(caching_sha2_password)和 mysql_native_password。
  • 此方法也适用于 MySQL 9.x,但请检查官方文档以确认最新变化。

准备工作

  1. 确认路径
    • 检查 my.ini 文件(C:\ProgramData\MySQL\MySQL Server 8.0\my.ini)中的 datadir 确认数据目录。
    • 确保有足够备份空间。
  2. 以管理员身份打开 CMD
    • 开始菜单搜索 “cmd”,右键 “以管理员身份运行”。

步骤 1: 停止 MySQL 服务

  • 运行命令:
    net stop MYSQL80
    
  • 如果报告“没有启动”,忽略。
  • 使用任务管理器(Ctrl + Shift + Esc)确认无 mysqld.exe 进程运行;如果有,结束任务。

步骤 2: 备份数据

  • 复制整个数据目录到备份位置(例如 D:\MySQL_Backup\Data):
    xcopy "C:\ProgramData\MySQL\MySQL Server 8.0\Data" "D:\MySQL_Backup\Data" /E /H /C /I /Y
    
  • 这会备份所有数据库文件。备份完成后,继续。

步骤 3: 以特殊模式启动 MySQL 服务器

  • 导航到 bin 目录:
    cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    
  • 启动服务器(跳过权限检查,并启用命名管道):
    "C:\Program Files\MySQL\MySQL Server 8.0\bin\mysqld.exe" --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.0\my.ini" MySQL80
    
  • 等待控制台显示 “ready for connections”(窗口会“卡住”,这是正常行为,因为 --console 模式下服务器在前台运行)。

步骤 4: 连接 MySQL 并重置密码

  • 打开另一个 CMD 窗口(管理员身份)。
  • 导航到 bin 目录:
    cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    
  • 连接(使用命名管道协议,无需密码):
    mysql -u root --protocol=PIPE
    
  • 在 mysql> 提示符下依次执行以下命令(替换 ‘123456’ 为新密码):
    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    FLUSH PRIVILEGES;
    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
    
  • 退出 MySQL:
    \q
    

步骤 5: 停止服务器并正常重启

  • 返回第一个 CMD 窗口,按 Ctrl+C 中断服务器。
  • 或者在第二个窗口运行:
    taskkill /F /IM mysqld.exe
    
  • 启动服务:
    net start MYSQL80
    

步骤 6: 测试新密码

  • 连接测试:
    mysql -u root -p
    
  • 输入新密码 ‘123456’。如果成功,即可正常使用。

常见问题排查

  • 启动失败:如果出现连接配置错误(如 TCP/IP 未配置),确保命令中包含 --enable-named-pipe 或 --shared-memory。
  • 连接错误 (ERROR 2003):确认使用 --protocol=PIPE;如果端口为 0,这是 --skip-grant-tables 的正常行为。
  • InnoDB 断言失败:添加 --innodb_force_recovery=1 到启动命令(临时使用),然后移除。
  • 数据损坏:从备份恢复数据目录,替换原目录后重启。
  • 如果 my.ini 中缺少配置,可在 [mysqld] 部分添加 enable-named-pipe=1 并重启服务。
  • 认证插件问题:如果连接失败,确认使用了 mysql_native_password 插件;如需默认插件,省略最后一个 ALTER 命令。
    此教程已验证成功,并兼容最新版本。 如果需要进一步优化或恢复备份,随时告知。

写文章用