MySQL 8.0+ 必须用 ALTER USER 修改 root 密码,先停服务、以 --skip-grant-tables 启动免密实例,确认认证插件后执行 ALTER USER 并 FLUSH PRIVILEGES,再正常重启;同时需同步更新 phpMyAdmin 的 config.inc.php 密码配置。

MySQL 8.0+ 下 ALTER USER 是唯一可靠方式
XAMPP 当前主流版本(如 8.3.x)自带 MySQL 8.0 或更高,SET PASSWORD 和 UPDATE user SET password=... 已被废弃,执行会报错 ERROR 1064 (42000) 或 ERROR 1372 (HY000)。必须用 ALTER USER,且需匹配当前认证插件。
操作前先确认插件类型:
- 打开命令行,无密码登录:
mysql -u root(不要加-p) - 执行:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root'; - 若
plugin是caching_sha2_password(MySQL 8.0 默认),必须指定该插件重设密码 - 若为
mysql_native_password,说明曾手动改过或降级过,可用旧插件
跳过权限验证必须手动启动 mysqld --skip-grant-tables
XAMPP 控制面板里的 “Reset Root Password” 按钮(resetroot.bat)在 MySQL 8.0+ 中已失效,双击无反应或报错 Unknown suffix '.'。不能依赖图形界面,必须走命令行安全模式。
关键步骤顺序不能错:
- 先在 XAMPP 控制面板中点击
Stop关闭 MySQL——确保mysqld.exe进程完全退出(任务管理器里搜不到) - 以管理员身份打开 CMD,进入:
C:\xampp\mysql\bin(Windows)或/opt/lampp/bin(Linux/macOS) - 执行:
mysqld --skip-grant-tables --bind-address=127.0.0.1 --port=3306 --console - 这个窗口必须保持打开——它就是临时的、免密的 MySQL 实例;关掉就断连
修改密码后必须 FLUSH PRIVILEGES 且正常重启服务
很多人执行完 ALTER USER 就直接关窗口、点 XAMPP 的 Start,结果新密码无效。原因有二:一是权限表未刷新,二是 --skip-grant-tables 实例占着 3306 端口,XAMPP 启动失败但不报错(日志里写 Can't start server: Bind on TCP/IP port)。
正确收尾动作:
- 在另一个 CMD 窗口执行:
mysql -u root(仍不加-p)→ 进入后立即运行:FLUSH PRIVILEGES; - 再执行密码语句,例如:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'MyNewPass123!'; - 回到第一个 CMD 窗口,按
Ctrl+C终止mysqld --skip-grant-tables - 此时再点 XAMPP 控制面板的
Start,它才能加载原始配置(my.ini)并启用新密码
phpMyAdmin 连接失败?检查 config.inc.php 密码字段
即使 MySQL root 密码改成功了,phpMyAdmin 仍可能显示 #1045 Cannot log in to the MySQL server。这不是数据库问题,而是 phpMyAdmin 自己没同步密码。
需要手动编辑配置文件:
- 路径:
C:\xampp\phpMyAdmin\config.inc.php(Windows) - 找到这一段:
$cfg['Servers'][$i]['password'] = ''; - 把空字符串改成你刚设的新密码:
$cfg['Servers'][$i]['password'] = 'MyNewPass123!'; - 注意:不要改
auth_type,保持'cookie'或'config'即可;改错会导致登录页直接 500
真正容易被忽略的是:MySQL 8.0 的密码策略默认要求至少 8 位、大小写字母+数字+特殊字符,输太短会静默失败——建议先用 MyNewPass123! 类似格式测试通路,再按需调整强度。











