先查日志确认是否真端口冲突:只有出现“Can't start server: Bind on TCP/IP port”才说明3306被占;若为unknown variable等错误,则是my.ini配置语法问题,需先修正配置文件。
确认是不是真端口冲突,别白改配置
php
Env 启动 MySQL 失败时,很多人直接去改
,结果重启还是报错。先打开 phpEnv 控制面板,点 MySQL 行右侧的
Logs
,翻到日志末尾,找这句:
。只有看到它,才是 3306 真被占了;如果看到的是
、
或语法错误提示,说明
本身有误(比如多了一个空格、用了中文引号),得先修配置文件再谈端口。
改 phpEnv 的 MySQL 端口:只动
的
段
phpEnv 的 MySQL 配置文件默认在
(不是
目录下那个同名文件)。用 VS Code 或记事本打开,确保只在
段内修改:
必须写成纯数字,比如
,不能写成
或
别把
写在
或文件末尾——MySQL 启动时完全不读这些位置
保存时选「UTF-8 无 BOM」编码,否则服务可能静默失败(Windows 下尤其常见)
改完必须先在 phpEnv 面板里点
Stop
,再点
Start
;只点 Start 不会重载配置
客户端连不上?不是服务没起,是还在往 3306 发请求
改了服务端口,但 PHP 还是报
,大概率是因为连接串没同步更新:
命令行连接要用
(注意大写
,小写
是密码)
phpEnv 自带的 phpMyAdmin:编辑
,找到
,改成
(别写
,Windows 下
会走命名管道,绕过端口)
PHP 代码中用
,第 5 个参数传端口号:
ThinkPHP 等框架要改
里的
(整数,非字符串),或
中的
并确认已加载
验证端口是否真监听成功,别信“重启就完事”
改完配置、重启服务、客户端也更新了,还是连不上?跳过猜测,直接看系统层面:
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
立即学习
“
PHP免费学习笔记(深入)
”;
Windows 下运行:
,如果有输出且 PID 对应
,说明服务已在监听
如果没有输出,用
确认 PID 是否属于
mysql
d;如果不是,说明 MySQL 根本没启动成功,得回看 Logs
Linux/macOS 类似,用
或
防火墙(尤其是 Windows Defender 防火墙或第三方安全软件)可能拦截新端口,临时关闭测试一下
最容易被忽略的是:改了端口后,Docker、云服务器安全组、SELinux 这些中间层全都不认你新配的端口,本地通不代表线上通。验证前先想清楚——你是在本地调试,还是准备部署?
my.iniCan't start server: Bind on TCP/IP portunknown variableinnodb_data_file_pathmy.inimy.ini[mysqld]C:\phpenv\mysql\my.inietc[mysqld]portport = 3307port = "3307"port = '3307'port[client]ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (111)mysql -u root -p -P 3307-P-pC:\phpenv\phpmyadmin\config.inc.php$cfg['Servers'][$i]['host']'127.0.0.1:3307'localhost:3307localhostmysqli_connect()mysqli_connect('127.0.0.1', 'root', '', 'test', 3307)config/database.php'port' => 3307.envDB_PORT=3307netstat -ano | findstr :3307mysqld.exetasklist | findstr ss -tlnp | grep :3307lsof -i :3307