phpenv中mysql密码修改需匹配host、刷新权限并更新phpmyadmin配置,8.0+禁用password()函数,须用alter user并重启服务生效。

phpEnv 自带的 MySQL 密码可以直接改,但不能只靠图形界面点几下就生效——关键在改完后是否刷新权限、是否匹配 host 和 authentication_string 字段。
phpEnv 启动后用 mysql -u root -p 连不进怎么办
这是最常见卡点:phpEnv 默认 MySQL root 密码为空(''),但部分新版 phpEnv 或手动改过配置后可能设了默认密码(如 root 或 123456)。如果提示 Access denied for user 'root'@'localhost',先别急着重装。
- 打开 phpEnv 主界面 → 点击「MySQL」→ 「MySQL 控制台」,它会自动调用
mysql -u root -p;若弹窗要输密码,直接回车(空密码)试试 - 若失败,说明密码已被设过。此时不要盲目猜,而是进 phpEnv 安装目录下的
mysql\bin,用管理员权限运行 CMD,执行:mysqld --skip-grant-tables --shared-memory
(注意加--shared-memory,Windows 下不加这个容易卡住) - 另开一个 CMD,执行
mysql -u root(不加-p),进库后先use mysql;,再查当前 root 的 host:SELECT User, Host, authentication_string FROM user WHERE User = 'root';
ALTER USER 报错 ERROR 1396 (HY000): Operation ALTER USER failed
这个错通常是因为你写的 host 不匹配数据库里存的记录。phpEnv 的 MySQL 默认允许 'root'@'localhost' 和 'root'@'127.0.0.1' 两条记录,但 ALTER USER 只能精确匹配其中一条。
- 先运行
SELECT User, Host FROM mysql.user WHERE User = 'root';,看实际存在哪几个 host - 改密码必须写全 host,比如:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass123'; - 如果想一并覆盖本地所有 root 访问方式,得分别执行两条:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass123';和ALTER USER 'root'@'127.0.0.1' IDENTIFIED BY 'newpass123'; - MySQL 8.0+ 不再支持
PASSWORD()函数,所以UPDATE user SET authentication_string = PASSWORD('xxx')会报错,必须用ALTER USER或SET PASSWORD
改完密码 phpMyAdmin 登录仍失败
phpEnv 自带的 phpMyAdmin 默认读取的是 config.inc.php 里的硬编码登录信息,不是实时连你刚改的 root 密码。
- 路径通常是:
phpenv\www\phpmyadmin\config.inc.php - 找到这一行:
$cfg['Servers'][$i]['password'] = '';,把空字符串改成你的新密码,例如:$cfg['Servers'][$i]['password'] = 'newpass123'; - 保存后重启 phpEnv 的 Apache 和 MySQL 服务(主界面上点「重启全部」)
- 如果还报
#2002 Cannot log in to the MySQL server,检查$cfg['Servers'][$i]['host']是不是写成了127.0.0.1却没同步改对应用户的 host,建议统一用localhost
用 mysqladmin 修改时提示 Can't connect to local MySQL server
这是因为 phpEnv 的 MySQL 服务名/端口非标准,mysqladmin 默认连 localhost:3306,而 phpEnv 可能用了其他端口(如 3307)或命名管道。
- 先确认 MySQL 实际端口:phpEnv 主界面 → MySQL → 「配置文件」→ 打开
my.ini,找port=行 - 改密码命令要显式指定端口和 socket(Windows 下常用):
mysqladmin -u root -p -P 3307 --socket="D:/phpenv/mysql/tmp/mysql.sock" password "newpass123"
- 如果提示
mysqladmin: connect to server at 'localhost' failed,大概率是 socket 路径不对;可临时删掉--socket参数,改用-h 127.0.0.1 -P 3307强制走 TCP
真正容易被忽略的是:phpEnv 每次「重启 MySQL」并不会自动重载 my.ini 里的变更,改了配置必须点「停止 MySQL」再「启动 MySQL」才生效;而密码改完如果不重启服务,旧连接仍可用,但新连接会按新凭据校验——这会导致你以为改失败了,其实是缓存或连接复用在干扰判断。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











