连接数据库报错:“SQLSTATE[HY000] [2002] No such file or director” 的解决办法
一、首选快速方案:修改数据库连接配置
- 将主机名从
localhost改为127.0.0.1- 原因:
localhost会尝试通过 Unix socket 文件连接,而127.0.0.1强制使用 TCP/IP 协议,避免 socket 文件依赖问题23。 - 操作位置:
// 数据库配置文件(如 database.php) 'host' => '127.0.0.1', // 替换原 'localhost'
- 原因:
二、检查并修复 PHP 配置(若方案一无效)
-
定位 MySQL 的 socket 文件路径
- 执行命令查找:
ps aux | grep mysql # 查找类似 /tmp/mysql.sock 的路径 sudo find / -name mysqld.sock # 全局搜索文件 - 常见路径:
/tmp/mysql.sock、/var/run/mysqld/mysqld.sock。
- 执行命令查找:
-
修改
php.ini中的 socket 配置- 找到并编辑
php.ini(路径通过phpinfo()确认) - 修改以下三项(根据实际路径):
mysql.default_socket = /tmp/mysql.sock mysqli.default_socket = /tmp/mysql.sock pdo_mysql.default_socket = /tmp/mysql.sock - 若缺少
php.ini,复制默认配置:sudo cp /etc/php.ini.default /etc/php.ini ```:ml-citation{ref="5,8" data="citationList"}。
- 找到并编辑
-
重启 Web 服务
- Apache:
sudo systemctl restart apache - Nginx + PHP-FPM:
sudo systemctl restart php-fpm。
- Apache:
三、检查 MySQL 服务与防火墙
-
确认 MySQL 服务运行状态
sudo systemctl status mysql # 确保服务为 active (running) -
调整 MySQL 绑定地址
- 编辑 MySQL 配置文件(
my.cnf或my.ini):[mysqld] bind-address = 0.0.0.0 # 允许所有 IP 连接 - 重启 MySQL:
sudo systemctl restart mysql。
- 编辑 MySQL 配置文件(
-
检查防火墙规则
- 开放 3306 端口:
sudo firewall-cmd --add-port=3306/tcp --permanent sudo firewall-cmd --reload ```:ml-citation{ref="2" data="citationList"}。
- 开放 3306 端口:
四、其他注意事项
- PHP 扩展缺失:通过
phpinfo()确认pdo_mysql或mysqli扩展已启用。 - 文件权限问题:确保 PHP 进程用户有权限读取
mysql.sock文件(如chmod 777 /tmp/mysql.sock临时测试)。