警告:PDO::__construct(): [2002] 没有这样的文件或目录(试图通过 unix:///tmp/mysql.sock 连接)
Posted
技术标签:
【中文标题】警告:PDO::__construct(): [2002] 没有这样的文件或目录(试图通过 unix:///tmp/mysql.sock 连接)【英文标题】:Warning: PDO::__construct(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in 【发布时间】:2010-12-21 15:12:07 【问题描述】:我的代码昨天工作正常,今天突然不想连接到我的数据库。我没有更改它或代码上的设置,也没有更新任何软件。我所做的就是:
new PDO('mysql:host=localhost;port=3306;dbname=test', 'username', 'password');
我收到一条很好的异常消息:
...
问题是:我显然不是尝试使用 unix 套接字连接,而是使用 TCP/IP。我究竟做错了什么?我这里有什么遗漏吗?
感谢您的帮助。
【问题讨论】:
你确认你的mysql服务器正在运行吗? 相关/欺骗:Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in 【参考方案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 的位置
找到你的 mysql.sock 文件。常见位置:
/tmp/mysql.sock /tmp/mysql/mysql.sock /var/mysql/mysql.sock 或者,如果您使用 MAMP 或 LAMP,请在 tmp 文件夹中查找 mysql编辑您的 php.ini 文件并正确设置 pdo_mysql.default_socket 的值
重新启动 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',
一切都很好。
【讨论】:
你在哪里添加了这一行?以上是关于警告:PDO::__construct(): [2002] 没有这样的文件或目录(试图通过 unix:///tmp/mysql.sock 连接)的主要内容,如果未能解决你的问题,请参考以下文章
PDO::__construct(): 发送 108 字节失败,errno=32 Broken pipe
PDO::__construct():服务器向客户端发送未知字符集 (255)。请向开发人员报告
PDO::__construct():服务器向客户端发送未知字符集 (255)。请向开发人员报告
PDO::__construct(): php_network_getaddresses: getaddrinfo failed: nodename or servname provided, or
PDO连接mysql8.0报PDO::__construct(): Server sent charset (255) unknown to the client. Please, report to
[PDOException] PDO::__construct(): php_network_getaddresses: getaddrinfo failed: