警告: PDO::__construct(): [2002] 没有这样的文件或目录 (尝试通过 unix:///tmp/mysql.sock 连接)

2022-08-30 12:48:35

我的代码昨天工作正常,今天突然它不想连接到我的数据库。我没有更改任何设置,也没有更新任何软件。我所做的就是:

new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');

我收到一个很好的异常消息,说这个:

警告: PDO::__construct(): [2002] 没有这样的文件或目录 (试图通过 unix:///tmp/mysql.sock 连接) 在 ...

问题是:我显然不是尝试使用unix套接字进行连接,而是使用TCP / IP。我做错了什么?我在这里错过了什么吗?

感谢您的任何帮助。


答案 1

您正在使用 Unix 套接字。在读取“localhost”时,MySQL客户端库不会将其解释为TCP主机“localhost”并解析该名称,而是使用默认的Socket位置。要在本地计算机上使用 TCP,必须将其用作主机名。127.0.0.1

指定过去的使用而不是在 DSN 中使用。用于 的套接字的位置可以在编译时定义,也可以在某些版本的 PHP 中使用 .unix_sockethostlocalhostpdo_mysql.default_socketphp.ini


答案 2

从有关使用PDO连接到MySQL的PHP文档中:PDO_MYSQL DNS

最后的注释说:

仅 Unix:

当主机名设置为“localhost”时,将通过域套接字与服务器建立连接。如果PDO_MYSQL是针对 libmysql 编译的,则套接字文件的位置位于 libmysql 编译的位置。如果PDO_MYSQL是针对 mysqlnd 编译的,则可以通过 pdo_mysql.default_socket 设置来设置默认套接字。

因此,为了解决此问题,您必须在php中正确配置.ini mysql.sock的位置

  1. 找到你的 mysql.sock 文件。常见位置:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • 或者,如果您使用 MAMP 或 LAMP,请在 mysql 的 tmp 文件夹中查找
  2. 编辑 php.ini 文件并正确设置 pdo_mysql.default_socket 的值

  3. 重新启动 Apache 服务器以拾取 php.ini 文件中的更改


推荐