error 1130 根本原因是 phpenv 中 mysql 默认仅允许 localhost 连接,root 用户 host 值为 'localhost',远程 ip 被拒绝;需改 user 表 host 为 '%' 或用 grant 授权,并重启 mysql 服务及放行防火墙 3306 端口。

phpEnv 环境下 MySQL 报 ERROR 1130 的根本原因
不是密码错,也不是 Navicat 配置问题,而是 phpEnv 自带的 MySQL 默认只允许 localhost 连接 —— mysql.user 表里 root 用户的 host 字段值是 'localhost',远程 IP 请求直接被拒绝。
改 user 表的 host 值(最常用、见效快)
在 phpEnv 控制面板中点击「MySQL 终端」或用命令行进入:mysql -u root -p(默认空密码,直接回车)
执行以下语句:
USE mysql;-
SELECT host, user FROM user WHERE user = 'root';→ 确认当前host是'localhost' UPDATE user SET host = '%' WHERE user = 'root' AND host = 'localhost';FLUSH PRIVILEGES;
⚠️ 注意:如果提示 ERROR 1062 (23000): Duplicate entry '%-root',说明已存在 'root'@'%' 记录,跳过 UPDATE,直接 FLUSH PRIVILEGES 即可。
用 GRANT 显式授权(更安全,推荐用于生产倾向环境)
相比直接改 user 表,GRANT 是 MySQL 官方推荐方式,且能自动处理加密插件兼容性(尤其 MySQL 8+):
- 若你用的是 MySQL 8+(phpEnv 新版常带),先确认认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root'; - 若
plugin是caching_sha2_password,远程连接可能因客户端不支持而失败,需同步指定插件:CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY '';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; - 若只想允许某 IP(如开发机
192.168.1.100):GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '' WITH GRANT OPTION; - 最后别忘:
FLUSH PRIVILEGES;
phpEnv 特有坑:服务没重启 / 防火墙拦了 3306
改完权限不代表立刻生效 —— phpEnv 的 MySQL 是以 Windows 服务方式运行的,必须重启服务:
- 打开 phpEnv 控制面板 → 点击「MySQL」右侧「重启」按钮;或
- 命令行执行:
net stop phpenv-mysql && net start phpenv-mysql
另外,Windows 自带防火墙默认会拦截 3306 端口。需手动放行:
「控制面板 → Windows Defender 防火墙 → 高级设置 → 入站规则 → 新建规则 → 端口 → TCP 3306 → 允许连接」
真正卡住人的往往不是 SQL 语句写错,而是改完 user 表忘了重启服务,或者防火墙静静躺在那儿不动声色。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











