phpMyAdmin无法重置MySQL root密码,必须通过--skip-grant-tables启动MySQL并执行UPDATE(5.7)或ALTER USER(8.0+),再同步更新config.inc.php中的$password配置。
phpMyAdmin 里根本没法重置 root 密码
phpmyadmin 只是 mysql 的图形界面,它本身没有“重置 root 密码”这个功能。你看到的用户管理页(phpmyadmin → 用户账户)里修改的,是 mysql 服务已认证通过后的某个账号密码;如果连 root 都登不进去,phpmyadmin 就压根启动不了——它连不上数据库,页面直接报错 #1045 cannot log in to the mysql server 或空白页。
必须停掉 MySQL,用 --skip-grant-tables 启动
这是唯一绕过权限验证、获得 root 级操作权的方式。关键不是“跳过”,而是让 mysqld 暂时不读取 mysql.user 表,这样任何连接都能以任意用户名登录(但只有 root 能执行密码修改操作)。
实操步骤:
- 停止 MySQL 服务:
sudo systemctl stop mysql(Ubuntu/Debian)或sudo brew services stop mysql(macOS Homebrew) - 手动带参数启动:
sudo mysqld --skip-grant-tables --skip-networking &(--skip-networking很重要,防止远程未授权访问) - 另开终端,无密码登录:
mysql -u root(此时不输密码,直接进) - 执行密码更新(MySQL 5.7+ 语法):
UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root'; FLUSH PRIVILEGES; - 退出并正常重启服务:
exit→sudo systemctl start mysql
MySQL 8.0+ 必须用 ALTER USER,PASSWORD() 已废弃
在 MySQL 8.0 中,PASSWORD() 函数被移除,再用上面那条 UPDATE 会报错 ERROR 1064 (42000)。而且默认认证插件变成 caching_sha2_password,旧方式无法兼容。
正确写法(MySQL 8.0+):
- 登录后先确认当前插件:
SELECT Host,User,plugin FROM mysql.user WHERE User='root'; - 若 plugin 是
caching_sha2_password,用:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的新密码';
- 若要兼容老客户端(比如旧版 phpMyAdmin),可切回
mysql_native_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码';
- 别忘了:
FLUSH PRIVILEGES;
改完密码后 phpMyAdmin 还登不上?检查 config.inc.php 里的 $cfg['Servers'][$i]['password']
很多人以为改了 MySQL 的 root 密码就万事大吉,结果 phpMyAdmin 页面还是报 #1045。这是因为 phpMyAdmin 自己也存了一份连接凭据,在配置文件里硬编码了密码。
定位并更新它:
- 找到 phpMyAdmin 配置文件路径,通常是:
/etc/phpmyadmin/config.inc.php(Debian/Ubuntu)或/usr/local/etc/phpmyadmin/config.inc.php(macOS) - 搜索
$cfg['Servers'][$i]['password'],把等号右边单引号里的旧密码换成新密码 - 确保该行没被注释(前面没有
//),且引号闭合正确 - 改完保存,不用重启 Apache/Nginx,但建议清浏览器缓存或换隐身窗口测试
最常被忽略的是:MySQL 密码改了,但 phpMyAdmin 的配置没同步,或者改错了行(比如改了 auth_type 相关的其他字段)。这时候错误看起来像权限问题,实际只是配置错位。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











