MySQL登录端口修改、2002错误排查及PHP mysqli端口设置方法
问题解答
一、端口值为0的原因及2002错误修复
原因
MySQL端口显示为0,说明你的MySQL服务未启用TCP/IP协议监听,仅通过Unix套接字(Linux/macOS环境)或Windows命名管道提供连接。而你上传CSV时触发的2002错误,本质是客户端尝试通过TCP/IP协议连接数据库,但服务未在任何TCP端口上监听,导致连接失败。
修复方法
1. 临时启用TCP/IP监听(单次生效)
启动MySQL时手动指定端口和绑定地址:
# Linux/macOS mysqld --port=3306 --bind-address=127.0.0.1 # Windows(需进入MySQL安装目录的bin文件夹) mysqld.exe --port=3306 --bind-address=127.0.0.1
2. 永久配置(重启后生效)
修改MySQL的配置文件,不同系统路径不同:
- Linux/macOS:通常是
/etc/my.cnf或/etc/mysql/my.cnf - Windows:通常是
C:\ProgramData\MySQL\MySQL Server X.X\my.ini(X.X为版本号)
在[mysqld]段添加或修改以下配置:
[mysqld] port = 3306 bind-address = 127.0.0.1
保存后重启MySQL服务:
# Linux systemctl restart mysql # Windows # 打开服务管理器,找到MySQL服务并重启
配置完成后,再执行以下命令验证端口是否生效:
mysql -u root -e "SHOW VARIABLES WHERE Variable_name = 'port';"
正常情况下会返回端口值3306。
二、PHP中mysqli设置端口的两种方式
针对你当前的代码,有两种方法指定端口:
方法1:在主机地址后追加:端口号
$database = new mysqli("127.0.0.1:3306", "root", "funkytown", "houston");
方法2:使用构造函数的第五个参数
mysqli构造函数的参数顺序为:主机, 用户名, 密码, 数据库名, 端口, 套接字路径,直接传入端口号即可:
$database = new mysqli("127.0.0.1", "root", "funkytown", "houston", 3306);
如果想改用套接字连接(无需TCP/IP),可以将主机设为localhost(区别于127.0.0.1,PHP会自动使用套接字),或者手动指定套接字路径作为第六个参数(以Linux为例):
$database = new mysqli("localhost", "root", "funkytown", "houston", null, "/var/run/mysqld/mysqld.sock");
内容的提问来源于stack exchange,提问作者elksie5000
相关产品推荐
相关产品推荐

