127001是无效IP字符串,必须写成127.0.0.1;它会被当作主机名触发DNS查询而失败,而非走MySQL端口。

hostname 写成 127001 肯定连不上——这是典型的 IP 地址拼写错误,不是配置逻辑问题,而是字符串本身无效。
必须写成 127.0.0.1(带英文句点)127001 会被 PHP 和 MySQL 客户端当作一个普通主机名去解析,而不是 IPv4 地址。系统会尝试 DNS 查询这个“域名”,查不到就报错(如 php_network_getaddresses: getaddrinfo failed),或直接触发连接拒绝(Connection refused),因为根本没走到数据库端口。
常见拼写/格式陷阱(CI4 中尤其敏感)
- ❌
127001— 缺少点号,非法 IP 字符串 - ❌
127.0.0.1— 末尾有空格(肉眼难见,但配置会失效) - ❌
'127.0.0.1'— CI4 的.env或Database.php中若用单引号包裹,且里面含特殊字符(如某些 shell 环境下),可能被截断或转义 - ❌
localhost在 Linux 生产环境常因 Unix socket 路径不匹配失败,但127.0.0.1是正确写法 —— 前提是它真的写对了
验证 hostname 是否生效的简单方法
在 CI4 项目根目录放一个 test_db.php:
<?php
$host = '127.0.0.1'; // 手动写死,和你的配置一致
$user = 'your_db_user';
$pass = 'your_db_pass';
$db = 'your_db_name';
$conn = mysqli_connect($host, $user, $pass, $db);
if (!$conn) {
echo "mysqli 连接失败: " . mysqli_connect_error();
} else {
echo "mysqli 连接成功(绕过 CI4,验证基础连通性)";
mysqli_close($conn);
}- 如果这个脚本也报错,说明
127.0.0.1确实不通 → 检查 MySQL 是否运行、是否监听127.0.0.1:3306(而非仅::1或localhost) - 如果它成功,但 CI4 仍失败 → 问题出在 CI4 配置读取环节(
.env未加载、Database.php路径不对、缓存未清等)
真正要检查的三件事(比 hostname 拼写更关键)
-
确保 MySQL 服务正在运行,并监听
127.0.0.1:3306:ss -tuln | grep :3306 # 应看到类似:tcp LISTEN 0 80 *:3306 *:* # 若只显示 :::3306,说明只监听 IPv6,需修改 MySQL 配置 bind-address = 127.0.0.1
检查
.env文件中是否用了database.default.hostname = "127.0.0.1"(双引号包围,无空格)-
修改配置后必须执行:
php spark cache:clear
不复杂但容易忽略。


















