应先用netstat或lsof查3306端口占用进程再决策,windows执行netstat -ano | findstr :3306获pid后用tasklist查进程名,linux/macos用sudo lsof -i :3306;确认可终止则关闭占用进程,否则修改my.ini中[mysqld]段port为3307并重启服务。

直接用 netstat 查 3306 是否被占
phpEnv 启动失败、MySQL 图标变红、点“启动”后立刻变灰,八成是 3306 端口冲突。别急着改配置,先确认是不是真被占了。
Windows 下打开管理员权限的命令提示符,执行:
netstat -ano | findstr :3306
如果有输出,末尾数字就是 PID;再用 tasklist | findstr "PID" 查进程名。常见抢占者:Skype、SQL Server、IIS、另一个 mysqld 实例,甚至某些国产安全软件的“网络防护”模块。
Linux/macOS 用户则用:
sudo lsof -i :3306
或:
sudo netstat -tulnp | grep :3306
phpEnv 自带的端口检测功能在哪找
phpEnv 控制面板右上角有“配置”按钮,点开 → “端口检测”,它会自动扫描 80(Apache)、3306(MySQL)、9000(PHP-FPM)等常用端口,并高亮标出已被占用的项。这个功能不依赖外部命令,适合新手快速定位,但只查默认端口,不扫自定义端口。
注意:端口检测 结果只是快照,不能替代 netstat 或 lsof 的实时性。比如你刚 kill 掉一个进程,phpEnv 检测界面可能还没刷新,建议手动刷新或重启 phpEnv 再试。
改 my.ini 之前先确认配置文件位置
phpEnv 的 MySQL 配置文件通常是 my.ini,路径在 phpEnv 安装目录下的 MySQL\bin\ 或 MySQL\my.ini(不是系统级的 C:\Windows\my.ini)。如果找不到,可在 phpEnv 主界面点“配置”→“MySQL 配置”,它会自动打开正确的文件。
编辑时只改 [mysqld] 段里的 port,例如:
port = 3307
不要动 basedir 或 datadir,除非你明确知道路径变了。改完保存,必须重启 phpEnv(不是只点 MySQL 启动),否则新端口不生效。
改端口后,所有连接 MySQL 的地方都要同步更新:php -r 测试脚本、config.inc.php、PDO DSN 中的 port=3307,漏一处就会连不上。
验证新端口是否真正通了
别只看 phpEnv 界面变绿就以为万事大吉。MySQL 服务起来了,不代表 PHP 能连上。最简验证方式是用 PHP 自带命令行直连:
php -r "$c = new mysqli('127.0.0.1', 'root', '', '', 3307); echo \$c->connect_error ? 'FAIL: '.\$c->connect_error : 'OK';"
输出 OK 才算真正通。如果报 Connection refused,说明 MySQL 没监听新端口(配置没生效或服务没重启);如果报 Class 'mysqli' not found,那是 PHP 扩展没开,和端口无关。
容易忽略的一点:bind-address 默认可能是 127.0.0.1,这没问题;但如果改成 0.0.0.0 或注释掉,在某些 phpEnv 版本里反而会导致启动失败,建议保持原样。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











