【问题标题】:Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in警告:PDO::__construct(): [2002] 没有这样的文件或目录(试图通过 unix:///tmp/mysql.sock 连接)
【发布时间】:2010-12-21 15:12:07
【问题描述】:

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

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

我收到一条很好的异常消息:

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

问题是:我显然不是尝试使用 unix 套接字连接,而是使用 TCP/IP。我究竟做错了什么?我这里有什么遗漏吗?

感谢您的帮助。

【问题讨论】:

标签: php mysql pdo


【解决方案1】:

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

要指定过去,请在 DSN 中使用 unix_socket 而不是 host。用于localhost 的套接字的位置可以在编译时或在某些 PHP 版本中使用pdo_mysql.default_socket 中的php.ini 定义。

【讨论】:

  • 但是没有办法禁用它吗?我的意思是,它和昨天一样工作。以及如何启用服务器上的套接字以使其正常工作?
  • 我在配置文件中使用了“localhost”的 PHP 脚本,在 RAM 升级和重启后,它们在从控制台触发时停止工作——仍然在浏览器中工作。将 'localhost' 更改为 '127.0.0.1' 修复了它。
  • 似乎这已停止工作。使用 127.0.0.1 似乎仍然默认使用套接字。
  • 这很烦人,多年来以不同的名义遇到过这个问题,我总是忘记这个挑剔的人,并花费大量时间寻找解决方案。如果 host == 'localhost' 使用套接字的“设计决定”对我来说似乎是绝对垃圾。
【解决方案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,请在 tmp 文件夹中查找 mysql
  2. 编辑您的 php.ini 文件并正确设置 pdo_mysql.default_socket 的值

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

【讨论】:

    【解决方案3】:

    在 Ubuntu 上,您可以在 php.ini 中使用此设置

    pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
    

    【讨论】:

      【解决方案4】:

      Drush 的文档有更新,记录在 here

      【讨论】:

        【解决方案5】:

        我刚刚添加了这一行:

        'unix_socket'   => '/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock',
        

        一切都很好。

        【讨论】:

        • 你在哪里添加了这一行?
        猜你喜欢
        • 2011-05-12
        • 2011-04-27
        • 2019-07-27
        • 2019-05-08
        相关资源
        最近更新 更多