mysql root密码修改失败主因是服务未停净、版本字段误用或未执行flush privileges;须停对应服务、用--skip-grant-tables+--shared-memory启动、按版本选alter user或update语句、刷新权限并同步更新客户端配置。

修改失败通常不是密码本身写错了,而是服务没停干净、版本字段写错、或改完没刷新权限表——这三个点踩中任意一个,都会导致ALTER USER或UPDATE看似执行成功,实际不生效。
MySQL服务还在跑,--skip-grant-tables根本没起作用
Windows 下常见现象是:执行mysqld --skip-grant-tables后黑窗卡住、无响应,或者另开窗口执行mysql -u root仍报Access denied。这不是命令写错了,而是它和已注册的 MySQL 服务(比如phpEnvMySQL、mysql80)端口冲突或内存共享失败。
- 必须先在「服务管理器」里手动停止对应服务(不能只靠
net stop mysql猜名字,要进服务列表确认真实名称) - 以管理员身份打开命令行,
cd进 MySQL 的bin目录(例如phpEnv\MySQL\bin) - 运行:
mysqld --skip-grant-tables --shared-memory --console——--shared-memory对 Windows 必不可少,否则权限表跳过失败 - 这个窗口保持打开,另起一个命令行操作登录
MySQL 5.7+ 和 8.0+ 的 password 字段已不存在
执行UPDATE user SET password = PASSWORD('123')时直接报ERROR 1054 (42S22): Unknown column 'password',说明你用的是 5.7.6 或更高版本。老教程里的password字段早在 5.7 就被移除,8.0.11+ 连PASSWORD()函数也废弃了。
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- 查清版本:
SELECT VERSION(); - 5.7.x(非 8.0):
UPDATE mysql.user SET authentication_string = PASSWORD('新密码') WHERE User = 'root' AND Host = 'localhost'; - 8.0.11+:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '新密码';(若客户端不兼容,可改用mysql_native_password) - 执行完必须跟一句:
FLUSH PRIVILEGES;,否则修改不落地
改完密码,phpMyAdmin 或其他工具还是连不上
只改 MySQL 服务端密码,不等于所有调用它的组件都同步更新。尤其在 phpEnv 等集成环境里,至少有三处配置必须手动改:
-
phpEnv\config\mysql.ini中的password=行 - phpEnv 控制面板「MySQL 设置」页里填的密码(保存后会重写配置)
-
phpEnv\phpmyadmin\config.inc.php中$cfg['Servers'][$i]['password']的值 - 改完
config.inc.php后必须清浏览器缓存,否则可能仍走旧 session
最常被忽略的是:改完密码后没执行FLUSH PRIVILEGES;,或者用了--skip-grant-tables却没指定--defaults-file指向真实my.ini路径,导致所有 SQL 操作只在内存里跑了一圈,关掉进程就全丢。










