解决MySQL/MariaDB忘记root密码:完整重置教程(XAMPP/Windows版)

目录

​编辑一、问题背景

常见报错场景

二、核心原理

三、前置准备

四、完整重置步骤(核心环节)

步骤1:彻底停止MySQL/MariaDB进程(关键前提)

步骤2:强制启动MySQL并跳过权限验证

步骤3:无密码登录MySQL/MariaDB

步骤4:重置root密码(核心步骤,二选一)

步骤5:恢复MySQL正常启动模式

步骤6:验证新密码(确认重置成功)

五、常见问题排查(避坑关键)

问题1:skip-grant-tables参数不生效

[问题2:执行ALTER USER命令报错1290](#问题2:执行ALTER USER命令报错1290)

[问题3:端口指定失败,提示"Can't connect to MySQL server on 'localhost'"](#问题3:端口指定失败,提示“Can't connect to MySQL server on 'localhost'”)

六、拓展:配置phpMyAdmin连接新密码

七、总结


一、问题背景

在使用XAMPP搭建本地开发环境时,很多开发者会遇到MySQL/MariaDB的root密码忘记,或执行登录命令时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost'的权限错误。本文针对Windows系统下XAMPP环境,提供一套90 %生效的密码重置方案,覆盖各类登录失败、密码修改报错场景,新手也能轻松操作。

常见报错场景

复制代码
# 场景1:无密码登录被拒 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

# 场景2:skip-grant-tables模式下修改密码被拒 ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement

二、核心原理

MySQL/MariaDB内置--skip-grant-tables启动参数,使用该参数启动数据库时,会跳过所有权限验证,允许无密码登录root账号;登录后通过刷新权限表解除语句限制,再执行密码修改命令重置root密码,最后停止强制启动进程、恢复正常权限验证模式,完成整个重置流程。

三、前置准备

  • 确认XAMPP安装路径(本文以D:\software\AI\PHP\XAMP为例,实际操作时替换为自己的安装路径);

  • 确认MySQL端口(本文为修改后的3307,默认端口为3306,端口不一致需全程对应修改);

  • 管理员身份打开CMD(右键开始菜单→选择"命令提示符(管理员)",避免权限不足导致命令执行失败)。

  • 配置Mysql文件,点击Config--->my.ini,在[mysqld]最后一行添加skip-grant-tables

四、完整重置步骤(核心环节)

步骤1:彻底停止MySQL/MariaDB进程(关键前提)

  1. 关闭正在运行的XAMPP控制面板(若已打开);

  2. 按下Ctrl+Shift+Esc组合键,打开任务管理器,切换到「详细信息」标签页;

  3. 找到所有名称为mysqld.exe的进程,右键选择「结束任务」,确保所有相关进程完全停止(若有残留,后续命令会执行失败)。

步骤2:强制启动MySQL并跳过权限验证

  1. 在管理员CMD窗口中,切换到MySQL的bin目录(路径替换为自己的XAMPP安装路径): cd D:\software\AI\PHP\XAMP\mysql\bin

    bash 复制代码
    cd mysql\bin
  2. 执行强制启动命令(指定端口,保持窗口后台运行)

    bash 复制代码
    mysqld --skip-grant-tables --port=3307 --console
     # 3307为自定义端口,若使用默认端口3306,替换为--port=3306即可

注意:执行命令后,该CMD窗口会显示MySQL启动日志,全程不要关闭此窗口,关闭则MySQL进程会立即终止,导致后续操作无法进行。

步骤3:无密码登录MySQL/MariaDB

  1. 新打开一个普通CMD窗口(无需管理员权限),同样切换到MySQL的bin目录:

    bash 复制代码
    ​​​​​​​ cd D:\software\AI\PHP\XAMP\mysql\bin
  2. 执行登录命令(严格指定端口,区分大小写):

    bash 复制代码
    mysql -u root -P 3307

成功登录提示:窗口会显示MariaDB [mysql]>mysql>提示符,说明无密码登录成功。

步骤4:重置root密码(核心步骤,二选一)

  1. 切换到MySQL系统权限数据库(必须执行,否则无法修改密码):

    bash 复制代码
     USE mysql
  2. 刷新权限表(解除skip-grant-tables模式的语句限制,否则修改密码会报错):

    bash 复制代码
     FLUSH PRIVILEGES
  3. 执行密码重置命令(根据自己的数据库版本选择,推荐方案1,兼容性更强):

    -- 方案1:MariaDB/MySQL 5.7+通用写法(推荐,本文优先使用)

    bash 复制代码
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456')
    #PASSWORD中123456是新密码,也可以换成别的密码

    方案2:MySQL 8.0+/MariaDB 10.4+兼容写法(若方案1报错,使用此方案)

    bash 复制代码
    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456'
    #BY中123456是新密码,也可以换成别的密码

    说明:将123456替换为自己想要设置的新密码,建议设置简单易记的密码(仅本地开发环境使用)。

  4. 密码重置成功提示:窗口会显示Query OK, 0 rows affected (0.01 sec),说明修改成功。

  5. 退出MySQL登录:

    bash 复制代码
     EXIT

步骤5:恢复MySQL正常启动模式

  1. 回到步骤2中打开的管理员CMD窗口(显示MySQL启动日志的窗口),按下Ctrl+C组合键,停止强制启动的MySQL进程;

  2. 打开XAMPP的MySQL配置文件:路径为D:\software\AI\PHP\XAMP\mysql\bin\my.ini(用记事本或编辑器打开),检查并删除文件中可能添加的skip-grant-tables语句(若之前未添加,可直接跳过此步);

  3. 打开XAMPP控制面板,点击「MySQL」模块的「Start」按钮,启动MySQL服务(确保端口与之前设置的一致,本文为3307)。

步骤6:验证新密码(确认重置成功)

  1. 打开CMD窗口,切换到MySQL的bin目录;

  2. 执行登录命令,验证新密码: mysql -u root -P 3307 -p

  3. 输入重置后的新密码(本文为123456),按下回车,若能正常显示MariaDB [mysql]>mysql>提示符,说明密码重置成功。

五、常见问题排查(避坑关键)

问题1:skip-grant-tables参数不生效

  • 核心原因:MySQL服务未彻底停止,或配置文件中skip-grant-tables写错位置、存在拼写错误;

  • 解决方案:优先使用本文「步骤2」的手动强制启动方式,绕过配置文件缓存;若仍不生效,重新检查任务管理器,确保所有mysqld.exe进程已终止,再重新执行步骤2。

问题2:执行ALTER USER命令报错1290

  • 核心原因:未执行FLUSH PRIVILEGES;命令,权限表未加载,导致skip-grant-tables模式下无法执行修改密码语句;

  • 解决方案:回到步骤4,先执行FLUSH PRIVILEGES;,再执行密码修改命令(方案1或方案2)。

问题3:端口指定失败,提示"Can't connect to MySQL server on 'localhost'"

  • 核心原因:端口参数大小写错误-P是大写,用于指定端口;小写-p是用于输入密码的参数),或端口被其他程序占用;

  • 解决方案:严格执行命令mysql -u root -P 3307(注意P是大写);若提示端口占用,关闭占用端口的程序,或修改MySQL端口后重新执行整个重置流程。

六、拓展:配置phpMyAdmin连接新密码

重置root密码后,若使用XAMPP自带的phpMyAdmin登录,会提示登录失败,需修改phpMyAdmin配置文件,步骤如下:

  1. 找到配置文件路径:XAMPP\phpMyAdmin\config.inc.php(用记事本或代码编辑器打开);

  2. 找到如下代码,填写重置后的新密码和MySQL端口:

    bash 复制代码
    $cfg['Servers'][$i]['user'] = 'root'; 
    $cfg['Servers'][$i]['password'] = '123456'; // 替换为重置后的新密码 
    $cfg['Servers'][$i]['port'] = '3307'; // 替换为自己的MySQL端口(默认3306)
  3. 保存文件,回到XAMPP控制面板,重启Apache服务(点击「Apache」模块的「Restart」或[Start]);

  4. 打开浏览器,访问http://localhost/phpmyadmin,使用root账号和新密码,即可正常登录。

七、总结

  • 密码重置核心逻辑:强制跳过权限验证 → 无密码登录 → 刷新权限 → 修改密码 → 恢复正常模式 ,全程围绕skip-grant-tables参数和权限表操作;

  • 关键注意点:若MySQL端口不是默认3306,所有涉及登录、启动的命令,必须添加-P 端口号(大写P),否则会连接失败;

  • 避坑重点:skip-grant-tables模式下,必须先执行FLUSH PRIVILEGES;,才能修改密码,否则会报1290错误;

  • 适配范围:该方案适用于Windows系统下XAMPP环境的所有MySQL/MariaDB版本,可解决忘记密码、登录被拒、密码修改报错等各类问题,完全适配本地开发环境使用。

相关推荐
杰克尼2 小时前
苍穹外卖--day10
java·数据库·spring boot·mybatis·notepad++
dreamread2 小时前
完美解决phpstudy安装后mysql无法启动
数据库·mysql
小江的记录本2 小时前
【SQL】多表关系与冷热数据(全维度知识体系)
数据库·sql·mysql·数据库开发·数据库架构
数据知道2 小时前
MongoDB慢查询分析:详细讲述如何使用profile集合识别性能瓶颈
数据库·mongodb
zjjsctcdl3 小时前
【prometheus】监控MySQL并实现可视化
数据库·mysql·prometheus
阿波罗尼亚3 小时前
MySQL 存储引擎 FEDERATED
数据库·mysql
lym5400508893 小时前
MySQL篇(管理工具)
数据库·mysql
NineData4 小时前
杭州 OpenClaw 开发者聚会来了!NineData 叶正盛将带来主题分享
数据库·人工智能
wang2455981995 小时前
【MySQL基础篇】概述及SQL指令:DDL及DML
sql·mysql·oracle