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

发布于 2024-08-12 16:32:06 字数 427 浏览 4 评论 0原文

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

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

我收到一条很好的异常消息,上面写着:

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

问题是:我显然没有尝试使用一个unix套接字但使用TCP/IP。我做错了什么?我在这里缺少什么吗?

感谢您的任何帮助。

My code was working all fine yesterday and today it suddenly just don't want to connect to my database. I have changed no settings on it or on the code and I haven't updated any software either. All I do is this:

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

And I get a nice exception message saying this:

Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in ...

The thing is: I'm clearly not trying to connect using a unix socket but using TCP/IP. What am I doing wrong? Is there something I'm missing here?

Thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

夏有森光若流苏 2024-08-19 16:32:06

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

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

You are using a Unix socket. When reading "localhost" MySQL client libraries don't interpret it as TCP host "localhost" and resolve that name but use the default Socket location. For using TCP on the local machine you have to use 127.0.0.1 as hostname.

To specify the past use unix_socketinstead of host in the DSN. The location of the socket used for localhost can be defined at compile time or in some versions of PHP using pdo_mysql.default_socket in the php.ini.

神妖 2024-08-19 16:32:06

来自有关使用 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 文件中的更改

From the PHP documentation about connection to MySQL using PDO: PDO_MYSQL DNS

The note at the very end says:

Unix only:

When the host name is set to "localhost", then the connection to the
server is made thru a domain socket. If PDO_MYSQL is compiled against
libmysql then the location of the socket file is at libmysql's
compiled in location. If PDO_MYSQL is compiled against mysqlnd a
default socket can be set thru the pdo_mysql.default_socket setting.

So in order to fix this you would have to properly configure in php.ini the location of your mysql.sock

  1. Find your mysql.sock file. Common locations:

    • /tmp/mysql.sock
    • /tmp/mysql/mysql.sock
    • /var/mysql/mysql.sock
    • or if you use MAMP or LAMP look for inside the tmp folder for mysql
  2. Edit your php.ini file and properly set the value for pdo_mysql.default_socket

  3. Restart your Apache server to pickup the changes in the php.ini file

柠檬心 2024-08-19 16:32:06

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

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

On Ubuntu, you can use this setting in php.ini

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock
心奴独伤 2024-08-19 16:32:06

Drush 文档有更新,此处记录了该更新。

There's an update to the docs for Drush which is documented here.

箹锭⒈辈孓 2024-08-19 16:32:06

我刚刚添加了这一行:

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

一切都很好。

I just added this line:

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

and all was well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文