mysql 8.0+ 忘记root密码需绕过认证重置:首选查错误日志获取临时密码,失败则用--skip-grant-tables启动并执行alter user 'root'@'localhost' identified by '新密码',注意兼容性需配合mysql_native_password插件及flush privileges。
phpmyadmin 本身不存 root 密码,它只是把你在登录框里输的密码原样转发给 mysql 服务端校验。报 access denied for user 'root'@'localhost',说明 mysql 拒绝了这次认证——得去 mysql 里重置,不是改 phpmyadmin 配置。
MySQL 8.0+ 必须用 ALTER USER 指定认证插件
直接执行 UPDATE mysql.user SET authentication_string = PASSWORD('xxx') 在 MySQL 8.0+ 会失败,因为 PASSWORD() 函数已被移除,且默认认证插件变成 caching_sha2_password,而旧版 phpMyAdmin(尤其 5.x 之前)不支持它。
- 先确认当前插件:
SELECT plugin FROM mysql.user WHERE User='root' AND Host='localhost'; - 如果返回
caching_sha2_password,但 phpMyAdmin 连不上,就强制切回兼容性更好的:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; - 别漏掉
FLUSH PRIVILEGES;,否则改动不生效
跳过密码登录 MySQL 的实操要点
忘了 root 密码时,必须绕过权限系统直连 MySQL 执行重置。关键不是“停服务”,而是用 --skip-grant-tables 启动一个临时无验证实例。
- Ubuntu/Debian:先
sudo systemctl stop mysql,再sudo mysqld_safe --skip-grant-tables & - macOS Homebrew:先
brew services stop mysql,再mysqld --skip-grant-tables & - 新开终端连:
mysql -u root(此时不需密码) - 执行重置语句后,必须退出 MySQL 并
sudo killall mysqld杀掉所有 mysqld 进程,再正常启动服务——否则--skip-grant-tables仍生效,等于裸奔
phpMyAdmin 配置文件里的 password 字段只在 config 模式下有效
改了 $cfg['Servers'][$i]['password'] 却没用?大概率你用的是 auth_type = 'cookie' 或 'http',此时 phpMyAdmin 完全忽略这个字段,只认你手动输入的密码。
- 查当前模式:
grep "auth_type" /etc/phpmyadmin/config.inc.php(路径可能为/usr/share/phpmyadmin/config.inc.php) - 若真要自动登录(仅限本地开发),必须同时满足:
auth_type = 'config'+$cfg['Servers'][$i]['user'] = 'root'+$cfg['Servers'][$i]['password'] = '你的新密码' - 改完配置后,必须重启 Web 服务:
sudo systemctl restart apache2或sudo systemctl restart nginx
最常被忽略的一点:MySQL 用户的 Host 字段必须匹配连接来源。执行 SELECT User,Host FROM mysql.user WHERE User='root';,如果结果里是 root@127.0.0.1 而不是 root@localhost,phpMyAdmin 用 localhost 连就会失败——得额外执行 CREATE USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxx'; GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION; 再刷新权限。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











