连接数据库报错:“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临时测试)。
