phpenv不管理MySQL,无默认密码;MySQL root密码由用户自行设置或安装时生成,空密码常见于本地环境,重置需用--skip-grant-tables或ALTER USER命令。

phpenv 本身不附带 MySQL,也不管理 MySQL 的密码。它只是一个 PHP 版本管理工具(类似 rbenv 或 pyenv),只负责切换不同版本的 PHP 解释器。你看到的“phpenv 自带 MySQL”其实是混淆了它和 phpstudy、XAMPP、MAMP 这类集成环境。
所以——phpenv 没有默认 MySQL 密码,也不会预装 MySQL。如果你在用 phpenv 同时又连上了 MySQL,那这个 MySQL 是你单独安装的(比如通过系统包管理器、Homebrew 或手动编译),它的密码由你自己或安装过程决定。
MySQL root 用户没设密码?常见于本地开发环境
很多开发者在 macOS(用 Homebrew)或 Linux 上装 MySQL 时,初始化后默认 root@localhost 密码为空,或者被设为随机字符串并打印在日志里:
-
Homebrew 安装后通常提示:
立即学习“PHP免费学习笔记(深入)”;
mysql_secure_installation
这个命令会引导你设置 root 密码、删匿名用户、禁用远程 root 登录等 如果跳过了这步,且没手动设过密码,
mysql -u root可能直接登录成功(即空密码)但 MySQL 8.0+ 默认使用
caching_sha2_password插件,即使密码为空,也可能因认证方式不兼容而报错:ERROR 1045 (28000): Access denied for user 'root'@'localhost'
如何确认当前 MySQL root 密码是否生效
先试最轻量的方式:
- 运行
mysql -u root -p,直接回车(不输任何字符)——如果进去了,说明密码为空 - 如果提示
Access denied,再试mysql -u root --socket=/tmp/mysql.sock -p(macOS/Homebrew 常用 socket 路径) - 查 MySQL 配置文件是否含
skip-grant-tables:它会让所有登录免密,但这是临时排障手段,不是默认行为 - 检查
~/.my.cnf是否存了凭据:[client] user=root password=yourpass
——这种配置会让mysql -u root自动读取密码
修改 MySQL root 密码的可靠操作(5.7+ 和 8.0+ 通用)
前提:你已能以高权限用户(如已有 root 密码)登录 MySQL。不能登录?见下一条。
- 登录后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass123!'; - MySQL 5.7 中若报错 “Unknown column 'password' in 'field list'”,说明你正面对的是 5.7.6+,必须用
ALTER USER,不能用旧式UPDATE mysql.user SET password=... - MySQL 8.0.12+ 已完全移除
PASSWORD()函数,写IDENTIFIED BY 'xxx'即可,无需函数包裹 -
ALTER USER会自动FLUSH PRIVILEGES,不用再手动执行 - 改完建议立刻测试:
mysql -u root -p输入新密码,看能否登录
完全忘记 root 密码?只能跳过权限表重置
这不是“修改”,而是强制重置,需停服务、加启动参数、绕过验证——也是唯一能救场的方式。
- 停止 MySQL:
sudo systemctl stop mysqld(CentOS/RHEL)或sudo service mysql stop(Debian/Ubuntu);macOS 用brew services stop mysql - 用跳过权限方式启动:
sudo mysqld_safe --skip-grant-tables --skip-networking &(--skip-networking防止远程未授权访问) - 新开终端,无密码登录:
mysql -u root - 执行(注意 MySQL 版本):
– 5.7:UPDATE mysql.user SET authentication_string=PASSWORD('MyNewPass123!') WHERE User='root' AND Host='localhost';
– 8.0+:ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass123!'; - 运行
FLUSH PRIVILEGES;(8.0+ 中ALTER USER已自动刷新,但保险起见仍建议执行) - 退出,杀掉
mysqld_safe进程,正常重启 MySQL 服务
最容易被忽略的一点:改完密码后,PHP 连接 MySQL 的代码(比如 mysqli_connect() 或 PDO DSN)里如果硬编码了旧密码,也会连不上——得同步更新代码或配置文件里的凭据。



















