phpenv的mysql默认不响应局域网请求,因其bind-address=127.0.0.1;需修改phpenv\mysql\my.ini中[mysqld]段为bind-address=0.0.0.0或具体ip,重启对应服务(如phpenv-mysql80),并创建'@%'用户、用mysql_native_password认证,防火墙规则须指定mysqld.exe路径而非仅开放3306端口。

phpEnv 的 MySQL 默认不响应局域网请求,因为 bind-address 是 127.0.0.1
phpEnv 是 Windows 下的集成环境包,它默认把 MySQL 配置成只监听本地回环地址。这意味着即使你开了防火墙、建了远程用户,其他电脑 mysql -h 192.168.1.100 -u user -p 也连不上——netstat -an | findstr :3306 只会看到 127.0.0.1:3306,没有 0.0.0.0:3306 或本机 IP 的监听。
必须手动改配置文件:phpenv\mysql\my.ini(不是系统级的 my.cnf)。找到 [mysqld] 段,在下面加或改这一行:
bind-address = 0.0.0.0
如果只想让同网段设备访问(更安全),可写成具体 IP,比如:bind-address = 192.168.1.100(用 ipconfig 查到的 IPv4 地址)。
改完保存,重启 phpEnv 的 MySQL 服务(不是整个 phpEnv,只重启 MySQL);否则配置不生效。
用户权限里写 '%' 不等于“自动允许远程连接”
很多用户执行了 GRANT ALL ON *.* TO 'dev'@'%' IDENTIFIED BY '123'; FLUSH PRIVILEGES; 还是连不上,原因有三个:
- 已有同名用户
'dev'@'localhost'存在,MySQL 会优先匹配更具体的 host,导致'dev'@'%'根本不被选中 -
'%'允许任意 IP,但若用户密码为空或用了过期认证插件(如caching_sha2_password),某些老客户端(如旧版 Navicat、PHP 7.4)会握手失败 - 没显式指定数据库权限范围,比如只授了
dev对testdb的权限,但连接时没带-D testdb或没在客户端里选库,也可能报错
建议操作顺序:
进入 phpEnv 自带的 MySQL CLI(通常在 phpEnv 安装目录下双击 mysql.bat):
SELECT User, Host FROM mysql.user WHERE User = 'dev';
如果看到 'dev'@'localhost' 和 'dev'@'%' 同时存在,先删掉本地那个:
DROP USER 'dev'@'localhost';
再重建远程用户,强制用 mysql_native_password 认证(兼容性更好):
CREATE USER 'dev'@'%' IDENTIFIED WITH mysql_native_password BY '123';<br>GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'dev'@'%';<br>FLUSH PRIVILEGES;
Windows 防火墙规则必须针对“程序路径”,不能只开端口
phpEnv 的 MySQL 是以 Windows 服务方式运行的,但它的可执行文件路径不是标准的 C:\Program Files\MySQL\...,而是类似 D:\phpenv\mysql\bin\mysqld.exe。如果你在防火墙里只新建了一条“开放 TCP 3306 端口”的入站规则,大概率无效。
正确做法是:打开 Windows Defender 防火墙高级设置 → 入站规则 → 新建规则 → 程序 → 浏览,定位到你的 phpEnv 安装目录下的 mysql\bin\mysqld.exe,再一路下一步,规则名称写 phpEnv-MySQL 即可。
验证是否生效:在另一台局域网电脑上执行 telnet 192.168.1.100 3306。如果黑窗口一闪而过没报错,说明端口通了;如果提示“无法连接到主机”,就是防火墙或 MySQL 本身没监听对。
phpEnv 的 MySQL 服务名不是 mysql,重启命令容易写错
phpEnv 启动的 MySQL 服务名通常是 phpenv-mysql 或带版本号的(如 phpenv-mysql80),不是系统默认的 mysql。直接运行 net start mysql 会报“服务名无效”。
查真实服务名的方法:
sc queryex type= service state= all | findstr "phpenv"
或打开 Windows 服务管理器(services.msc),找名字含 phpenv 和 mysql 的服务。
重启命令示例(假设服务名为 phpenv-mysql80):
net stop phpenv-mysql80 && net start phpenv-mysql80
注意:每次改完 my.ini 或用户权限后,都必须重启这个具体服务,且要等几秒让它完全加载完成,再测试连接。
最容易被忽略的是服务名混淆和防火墙规则绑定到错误程序路径——这两处出错,其他所有配置都白搭。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











