phpEnv启动MySQL后mysql -u root -p报Access denied,因5.7+/8.0首次初始化生成随机密码,需查phpEnv\MySQL\data*.err日志中“A temporary password”行获取临时密码,登录后执行ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';并同步更新phpEnv\config\mysql.ini、控制面板设置及phpMyAdmin的config.inc.php中的密码。

phpEnv 启动 MySQL 后 mysql -u root -p 报错 Access denied
说明 root 密码不是空,也不是默认的 root,但你又没设过——这通常是因为 phpEnv 自带的 MySQL(尤其是 5.7+ 或 8.0 版本)在首次初始化时自动生成了随机密码,并写入错误日志。Windows 下默认日志路径是:phpEnv\MySQL\data\*.err(比如 DESKTOP-ABC.err)。用记事本打开该文件,搜索 A temporary password,就能找到那一长串初始密码。
拿到密码后,必须立刻登录并重置,否则无法执行后续权限操作:
- 命令行执行:
mysql -u root -p,粘贴刚复制的临时密码 - 进入后立即执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; - 别忘了:
FLUSH PRIVILEGES;
执行 SET PASSWORD 或 UPDATE user 提示 Unknown column 'password'
这是 MySQL 5.7.6+ 和 8.0 的典型兼容问题:老教程里的 password 字段已废弃,改用 authentication_string。如果你看到类似错误:
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
就说明你正在对 5.7.26 或更高版本执行旧语法。正确做法是:
立即学习“PHP免费学习笔记(深入)”;
- 确认当前用户 Host:
SELECT User, Host FROM mysql.user WHERE User = 'root'; - 按实际 Host 更新(常见为
'localhost'或'127.0.0.1'):UPDATE mysql.user SET authentication_string = PASSWORD('新密码') WHERE User = 'root' AND Host = 'localhost'; -
PASSWORD()函数在 8.0.11+ 已弃用,若用的是 MySQL 8.0.11 及以上,请改用:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '新密码';
想跳过验证直接改密码,但 mysqld --skip-grant-tables 启动失败或卡住
phpEnv 的 MySQL 服务常被封装成 Windows 服务(如 phpEnvMySQL),直接运行 mysqld 二进制会因端口占用、配置冲突或缺少依赖而失败。更稳妥的方式是:
- 先在 Windows 服务管理器中停止
phpEnvMySQL(或类似名称的服务) - 进到
phpEnv\MySQL\bin目录,用管理员权限打开命令行 - 执行:
mysqld --skip-grant-tables --shared-memory --console(加--console能实时看报错) - 如果提示
The server quit without updating PID file,大概率是my.ini里指定了pid-file或socket路径冲突,临时注释掉这两行再试
改完密码,phpEnv 控制面板仍连不上 MySQL
phpEnv 界面连接 MySQL 用的是它自己配置的连接参数,不读取你本地命令行的认证状态。即使 root 密码已更新,控制面板仍可能缓存旧凭据或使用独立配置文件。
检查两个地方:
-
phpEnv\config\mysql.ini(或类似路径下的 ini 文件),查找是否有password=行,手动改成你的新密码 - phpEnv 主界面右下角托盘图标 → 右键 → “设置” → 查看数据库连接配置是否被硬编码为旧值
- 改完记得重启整个 phpEnv 应用,不只是 MySQL 服务
最易被忽略的一点:phpEnv 内置的 phpMyAdmin 通常有自己的配置文件 phpEnv\www\phpmyadmin\config.inc.php,里面 $cfg['Servers'][$i]['password'] 也要同步更新,否则点开 phpMyAdmin 仍提示登录失败。



















