错误2002表示PHP无法连接MySQL服务,主因是地址/端口/服务状态不匹配;'localhost'走socket易失败,改用'127.0.0.1'强制TCP可快速验证;需确认mysqld运行、端口监听及Docker中正确使用服务名。
错误号 2002 表示 PHP 无法建立到 MySQL 服务的底层连接,本质是网络或服务可达性问题,不是 SQL 语法或权限问题。最常见原因是连接地址、端口、服务状态三者之一不匹配。
mysqli_connect() 的 host 参数是否写错很多开发者直接写 'localhost',但 MySQL 对这个值有特殊处理:它会优先尝试 Unix socket 连接(而非 TCP),而 socket 路径若不对或 mysqld 未配置,就会触发 2002。换成 '127.0.0.1' 强制走 TCP 是最快验证方式。
'localhost' → 尝试 Unix socket(路径由 MySQL 配置 socket 项决定)'127.0.0.1' → 强制 TCP,走 port(默认 3306)'192.168.1.100' 或域名也走 TCP,但需确认防火墙和 MySQL 的 bind-address
mysqli_connect('127.0.0.1', 'root', 'pass', 'test', 3306); // 推荐先这样试
报 2002 时,先别调代码,直接在服务器终端验证 MySQL 是否真在跑、能否被访问:
systemctl status mysql 或 ps aux | grep mysqld
netstat -tlnp | grep :3306,看是否有 
mysqld 占用127.0.0.1:3306,说明绑定了本地;若要外网连,需改 MySQL 配置 bind-address = 0.0.0.0 并重启localhost 指的是 PHP 容器自身,不是 MySQL 容器 —— 应该用服务名如 'mysql'(docker-compose.yml 中定义的)较新版本 MySQL(8.0+)默认使用 caching_sha2_password 认证插件,而旧版 PHP(
ALTER USER 'your_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_pass';
default_authentication_plugin = mysql_native_password
host 不能填 localhost