ERROR 1045不是输错密码,而是XAMPP默认root无密码但强制验密;必须以管理员身份终止mysqld.exe、手动执行mysqld --skip-grant-tables --console启动,再mysql -u root登录执行FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '新密码';最后关闭该进程并重启XAMPP服务。

直接说结论:ERROR 1045 (28000): Access denied for user 'root'@'localhost' 不是输错密码的问题,而是当前 MySQL 实例拒绝认证——XAMPP 默认 root 为空密码,但命令行或 phpMyAdmin 强制要求密码字段非空;必须跳过权限系统重置,不能靠 resetroot.bat 或改 my.ini 解决。
为什么 resetroot.bat 和改 my.ini 都失效了
这两个方法在 MySQL 8.0+(XAMPP 当前主流版本)中已彻底不可用:
-
resetroot.bat仍用UPDATE mysql.user SET password = PASSWORD('xxx'),但PASSWORD()函数在 MySQL 8.0.29+ 已移除,执行直接报ERROR 1064或静默失败 - 在
my.ini的[mysqld]段加skip-grant-tables会导致 MySQL 启动时检测到权限表已加载,直接报ERROR 1290并退出,根本起不来 - 真正有效的绕过方式,是手动以参数启动
mysqld,且必须确保原进程已完全退出
手动启动 mysqld --skip-grant-tables 总卡住或报错
这不是命令写错了,而是前置条件没满足。Windows 下常见失败原因和对应操作:
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
- 没杀干净
mysqld.exe进程:XAMPP 控制面板点 Stop 后,务必打开任务管理器 →「详细信息」页 → 找到所有mysqld.exe→ 全部「结束任务」 - 没用管理员权限运行 CMD:右键「命令提示符(管理员)」,否则 Windows 会拒绝绑定端口
- 路径不对或参数漏了:
cd C:\xampp\mysql\bin(按你实际安装路径调整),再执行完整命令:mysqld --skip-grant-tables --bind-address=127.0.0.1 --port=3306 --console -
--console必须带上:它能实时输出日志,看到Ready for connections才算真正启动成功;没这句,窗口可能黑屏卡住,你以为失败其实只是没反馈
mysql -u root 登录后 ALTER USER 报 ERROR 1290
这是正常现象——--skip-grant-tables 模式下 MySQL 明确禁止执行 ALTER USER、CREATE USER 等权限类语句。此时必须改用直接更新系统表的方式(仅限此模式下安全):
- 新开一个 CMD 窗口,执行:
mysql -u root(不加-p,也不加-h) - 登录后立即执行:
USE mysql; UPDATE user SET authentication_string = '' WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES;
- 注意:
authentication_string字段在 MySQL 8.0+ 中替代了旧版的password字段;设为空字符串表示清空密码,后续可再用ALTER USER设置强密码 - 如果连
UPDATE都报错(极少见),说明你连的不是那个--skip-grant-tables实例——检查端口是否被占,或确认第二个 CMD 是否用了默认 socket 而非 TCP 连接
改完密码 XAMPP 控制面板还是起不来 MySQL
根本原因是:那个跑着 mysqld --skip-grant-tables 的 CMD 窗口还在占着 3306 端口。XAMPP 控制面板点击 Start 时,会尝试启动自己的 mysqld,但端口冲突直接失败。
- 必须手动关闭运行
mysqld --skip-grant-tables的那个 CMD 窗口(不是最小化,是点 × 关闭) - 再回到 XAMPP 控制面板,点 MySQL 的 Start —— 它才会读取原始
my.ini,加载完整权限系统,用你刚设的新密码校验 - 验证是否生效:
mysql -u root -p,输入新密码;若仍报ERROR 1045,大概率是FLUSH PRIVILEGES没执行,或Host不匹配(比如你改的是'root'@'127.0.0.1',但连接用的是localhost)
整个过程里最容易被忽略的,是 --console 输出的日志和任务管理器里残留进程的清理——没这两步,其他所有操作都是在给失败铺路。

















