ERROR 1044 根本原因是 root@localhost 的 Grant_priv 为 'N',需通过 skip-grant-tables 跳过验证后执行 UPDATE user SET Grant_priv='Y', Super_priv='Y' 修复,并删掉该配置重启服务。

phpEnv 里 MySQL 报 ERROR 1044 (42000),基本不是 phpEnv 自身问题,而是 MySQL 用户权限配置不全 —— 尤其常见于全新安装后 root 用户缺失 GRANT OPTION 或数据库级权限。
为什么 phpEnv 启动的 MySQL 会报 1044?
phpEnv 是 Windows 下的集成环境,它调用的是本地 MySQL 服务(通常是 zip 解压版或精简版),这类部署往往跳过了初始化权限表的完整流程。典型表现是:
-
SHOW GRANTS;只返回GRANT USAGE ON *.* TO 'root'@'localhost',没有GRANT OPTION - 执行
CREATE DATABASE、GRANT ALL ON db.* TO ...直接报错 1044 - 即使能登录,也提示 “Access denied for user 'root'@'localhost' to database 'xxx'”
根本原因:MySQL 的 mysql.user 表中,root@localhost 的 Grant_priv 字段值为 'N',而非 'Y'。
绕过密码直接进 MySQL 修改权限(phpEnv 场景)
phpEnv 自带的 MySQL 通常没设密码或密码为空,但即使空密码,权限表本身可能损坏。必须先跳过权限验证才能修复:
立即学习“PHP免费学习笔记(深入)”;
- 找到 phpEnv 对应的 MySQL 配置文件:
phpenv\mysql\my.ini(路径以你实际安装为准) - 在
[mysqld]段落下添加一行:skip-grant-tables - 重启 phpEnv 的 MySQL 服务(通过 phpEnv 控制面板或命令行:
phpenv mysql restart) - 此时无需密码即可登录:
mysql -u root(注意:不是mysql -u root -p)
修复 root@localhost 的 GRANT 权限(关键一步)
登录后立即执行以下语句(顺序不能错,且必须用 mysql 系统库):
USE mysql; UPDATE user SET Grant_priv='Y', Super_priv='Y' WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES;
验证是否生效:
SELECT Host, User, Grant_priv, Super_priv FROM user WHERE User='root';
看到 Grant_priv 和 Super_priv 都是 Y 才算成功。之后可删掉 my.ini 中的 skip-grant-tables 并重启服务。
创建新用户时仍报 1044?检查 host 匹配和权限范围
即使 root 修好了,新建用户也可能触发 1044,常见坑点:
-
CREATE USER 'test'@'localhost' IDENTIFIED BY '123';成功,但GRANT ALL ON testdb.* TO 'test'@'localhost';报错 → 原因:testdb还没CREATE DATABASE,MySQL 不允许对不存在的库授予权限 -
GRANT ALL ON *.* TO 'test'@'%';报错 → 因为root@localhost没有GRANT OPTION,无法转授全局权限(即使你自己有) - 用 phpEnv 的 phpMyAdmin 登录后看不到“用户”菜单 → 说明当前登录账号权限不足,不是界面问题,而是权限表未刷新或 host 不匹配
最稳妥的新用户流程:CREATE DATABASE testdb; → CREATE USER 'test'@'localhost' IDENTIFIED BY '123'; → GRANT ALL ON testdb.* TO 'test'@'localhost'; → FLUSH PRIVILEGES;
权限修复后别忘了删掉 skip-grant-tables —— 这个开关开着等于裸奔,任何能连上本地 MySQL 的程序都能无密码操作所有数据。



















