error 1130 表示ip未授权,需检查root用户host权限(如仅localhost)、bind-address配置(应为0.0.0.0或注释)及windows防火墙是否放行3306端口,三者缺一不可。

ERROR 1130 不是 MySQL 崩了,也不是密码错了——它明确告诉你:这个 IP 地址没被授权连进来。phpEnv 默认和 phpStudy 类似,root 用户只允许从 localhost 连接,%(任意主机)权限压根没开。
确认当前 root 用户的 host 限制
先别急着改配置,用 phpEnv 自带的 MySQL CLI 或命令行连进去看一眼真实权限:
mysql -u root -p
进库后执行:
USE mysql;<br>SELECT host, user FROM user WHERE user = 'root';
如果只看到 localhost,没有 % 或你本机 IP,那问题就定位准了。注意:MySQL 8.0+ 的 user 表结构有变,password 字段已移除,改用 authentication_string,但 host 判断逻辑不变。
用 GRANT 开放远程访问(推荐)
比直接 UPDATE user 表更安全、更符合 MySQL 权限模型。在 MySQL 命令行中执行:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;<br>FLUSH PRIVILEGES;
-
'root'@'%'表示用户 root 允许从任意 IP 连接 - 如果只想放开某台机器(比如开发用的笔记本),把
%换成具体 IP,如'root'@'192.168.1.100' -
FLUSH PRIVILEGES必须执行,否则权限不生效——很多人漏这步,改完以为好了,其实没刷新 - phpEnv 的 MySQL 服务一般不需要重启,权限立即生效
检查 phpEnv 的 my.ini 是否禁用了远程监听
打开 phpEnv 安装目录下的 my.ini(通常在 phpEnv\MySQL\conf\my.ini),搜索 bind-address:
- 如果存在
bind-address = 127.0.0.1,删掉这行或改成bind-address = 0.0.0.0 - 如果不存在该配置,默认行为取决于 MySQL 版本:5.7 默认监听所有地址,8.0+ 默认只绑
127.0.0.1 - 改完保存,必须重启 phpEnv 的 MySQL 服务(不是整个 phpEnv,只重启 MySQL)
改完后验证端口监听状态:
netstat -ano | findstr :3306
看到 0.0.0.0:3306 或 [::]:3306 才算真正放开网络层。
防火墙和杀毒软件常被忽略
即使 MySQL 配置全对、权限也开了,Windows 防火墙仍可能拦截 3306 端口:
- 打开「Windows Defender 防火墙」→「高级设置」→「入站规则」
- 新建规则 → 端口 → TCP 3306 → 允许连接 → 域/专用/公用全勾上
- 某些国产杀软(如 360、腾讯电脑管家)会静默拦截数据库端口,临时关闭测试一下
本地测试用 telnet 127.0.0.1 3306 能通,但用本机局域网 IP(如 192.168.1.105)不通,基本就是防火墙卡的。
最易被跳过的点:host 权限、bind-address、防火墙——三者缺一不可。尤其 FLUSH PRIVILEGES 和防火墙,查问题时最容易反复踩坑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











