phpEnv的MySQL默认仅监听127.0.0.1且禁用网络连接,需修改my.ini注释bind-address、关闭skip-networking,重启MySQL服务,并显式授权root@'127.0.0.1'才能支持Navicat等TCP连接。

phpEnv的MySQL默认不监听远程请求
phpEnv自带的MySQL服务默认只绑定127.0.0.1:3306,且配置中启用了skip-networking或显式写了bind-address = 127.0.0.1,这意味着它拒绝所有TCP连接(包括Navicat、PHP脚本、命令行mysql -h 127.0.0.1),只接受本地socket通信。填localhost在Windows下还可能走命名管道,进一步失败。
改my.ini必须动这两处并重启服务
路径通常是phpEnv\mysql\my.ini(以你安装位置为准),打开后定位到[mysqld]段落:
- 注释或删除整行
bind-address = 127.0.0.1(留空或删掉,不要改成0.0.0.0——phpEnv的MySQL版本较老,部分编译不支持该值) - 确认
skip-networking被注释掉(即前面有#)或根本不存在该行 - 保存文件后,**必须通过phpEnv控制面板点击「重启 MySQL」**,仅重启phpEnv主程序或Windows服务无效
授权root@'127.0.0.1'是关键一步
phpEnv默认只建了root@localhost,但Navicat和PHP的TCP连接会被识别为127.0.0.1而非localhost,所以光授权@'%'不够,必须显式加一条:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
如果还要支持其他本地工具(如VS Code插件),再补:
面向 CRM 系统的 MySQL 8 数据库模式设计。当用户需要为客户关系管理(CRM)系统设计、评审、优化或生成数据库模式时,应使用此项技能。
立即学习“PHP免费学习笔记(深入)”;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
最后别漏:FLUSH PRIVILEGES;
Navicat连接参数不能填localhost
这是最常卡住的地方:
- 主机名/地址:必须填
127.0.0.1(不是localhost,Windows下会错用命名管道) - 端口:确认是phpEnv里设置的MySQL端口(默认
3306,若你改过就得填对) - 用户名密码:必须和上面
GRANT语句里写的完全一致(若安装时没设密码,授权时也得写IDENTIFIED BY '',此处密码字段留空) - 测试前务必检查phpEnv面板中MySQL状态是绿色「运行中」——它不会随系统自启
防火墙不用开,因为只是本地回环通信;但如果你之后想从局域网其他机器连,才需要把bind-address设为0.0.0.0并开3306端口,不过那已超出phpEnv本地开发场景。真正容易忽略的是:改完my.ini不重启MySQL服务,或者授权时漏了@'127.0.0.1'这一条。


















