PHP PDO连接MariaDB在LAMPP环境报SQLSTATE[HY000][2002]错误
解决LAMPP环境下PDO连接MariaDB报SQLSTATE[HY000] [2002]错误
问题分析
你在PhpStorm中能正常连接数据库,但LAMPP环境下触发No such file or directory异常,核心矛盾点在于:虽然指定了host=127.0.0.1(TCP连接模式),但PDO仍尝试通过套接字连接,或套接字文件本身存在权限/路径问题。
解决方案
1. 确认LAMPP的MariaDB服务已启动
LAMPP的数据库服务可能未正常运行,先检查状态:
sudo /opt/lampp/bin/mysql.server status
如果显示STOPPED,启动服务:
sudo /opt/lampp/bin/mysql.server start
也可以通过图形化控制面板管理服务:
sudo /opt/lampp/manager-linux-x64.run
2. 验证套接字文件的存在与权限
报错提示套接字找不到,先确认文件是否存在:
ls -l /opt/lampp/var/mysql/mysql.sock
- 如果文件不存在:重启MariaDB服务会自动生成该文件
- 如果文件存在:检查Apache运行用户(www-data)是否有访问权限
# 修正套接字文件的所属组和权限 sudo chown mysql:mysql /opt/lampp/var/mysql/mysql.sock sudo chmod 770 /opt/lampp/var/mysql/mysql.sock # 将www-data用户加入mysql组,获取访问权限 sudo usermod -aG mysql www-data
3. 移除PDO DSN中的unix_socket参数(关键操作)
当指定host=127.0.0.1时,PDO会强制使用TCP连接,此时unix_socket参数会造成冲突,导致PDO错误地尝试套接字连接。修改DatabaseManager.php:
function create_connection_to_db() : PDO { global $host, $port, $dbname, $user, $password; // 移除unix_socket参数,让PDO走TCP连接 return new PDO("mysql:host={$host};port=$port;dbname={$dbname}", $user, $password); }
4. 确认PHP配置生效并重启Apache
修改php.ini后必须重启Apache才能让配置生效:
sudo /opt/lampp/apachectl restart
新建phpinfo.php文件验证配置:
<?php phpinfo(); ?>
访问该文件后,搜索pdo_mysql.default_socket,确认路径为/opt/lampp/var/mysql/mysql.sock。
5. 测试TCP连接可用性
用LAMPP自带的MySQL客户端测试TCP连接是否正常:
/opt/lampp/bin/mysql -h 127.0.0.1 -P 3306 -u root -p
输入密码(你的配置为空,直接回车),如果能正常登录,说明TCP连接没问题;如果连不上,检查端口监听状态:
netstat -tulpn | grep 3306
确认输出中有mysqld进程监听127.0.0.1:3306。
内容的提问来源于stack exchange,提问作者JCGdev
相关产品推荐
相关产品推荐

