MySQL 连接无法工作: 2002没有这样的文件或目录

我正在设置 WordPress。我已经运行了 Apache 和 MySQL,帐户和数据库都已经设置好了。我试图建立一个简单的联系:

<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>

And I always get this:

错误: 2002-没有这样的文件或 directory

它说的是什么文件或目录?

我使用的是 OS X Snow Leopard 操作系统,使用的是内置的 Apache,我使用 x86 _ 64 dmg 安装了 MySQL。

更新: 我发现套接字位于/tmp/mysql.sock,因此在 php.ini 中,我将所有出现错误路径的地方都替换为/tmp/mysql.sock。

382772 次浏览

我将检查您的 php.ini 文件并验证 mysql.default _ socket 是否设置正确,还验证 mysqld 是否正确配置了它可以访问的套接字文件。典型的默认值是“/tmp/mysql.sock”。

不是说它对你有多大帮助,但是在 MySQL 的 最近的版本(甚至是 没那么近了)中,错误代码2002意味着“无法通过 socket [ name-of-socket ]连接到本地 MySQL 服务器”,所以这可能会告诉你更多信息。

首先,确保 MySQL 正在运行

如果你仍然无法连接: 您的/etc/my.cnf 是什么样子的? (或者/etc/msyql/my.cnf)

另外两个帖子是正确的,因为2002是一个套接字错误,所以您需要检查您的套接字。

设置 LAMP 的一个很好的教程是: http://library.linode.com/lamp-guides/centos-5.3/index-print

如果使用 Linux: mysql.sock 文件的路径是错误的。这通常是因为您正在使用(LAMPP) XAMPP,而它不在/tmp/mysql.sock 中

打开 php.ini 文件,找到下面这行:

mysql.default_socket

做出来

mysql.default_socket = /path/to/mysql.sock

我有一个类似的问题,能够解决它通过解决我的 mysql 与 127.0.0.1而不是 localhost

这可能意味着我的主机设置有问题,但这个快速修复得到我现在去。

这是 Mac OS X本地安装 Apache HTTP自定义安装 MySQL

这个问题的答案是基于@alec-gorge 的出色回答,但是由于我不得不在谷歌上搜索一些具体的变化,以便在我的配置中配置它,大部分是 Mac OS X 特有的,我想我应该在这里添加它,以便完整。

启用对 Apache HTTP 的 PHP5支持

确保在 /etc/apache2/httpd.conf中启用了 PHP5支持。

sudo vi /etc/apache2/httpd.conf编辑文件(询问时输入密码)并取消注释(从开头删除 ;)该行以加载 Php5 _ module模块。

LoadModule php5_module libexec/apache2/libphp5.so

使用 sudo apachectl start启动 Apache HTTP (如果已经启动并需要重新启动以重新读取配置文件,则使用 restart)。

确保 /var/log/apache2/error_log包含一行,告诉您启用了 php5 _ module-您应该看到 PHP/5.3.15(或类似的)。

[notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations

查找 Socket 文件的名称

当 MySQL 启动并运行(使用 ./bin/mysqld_safe)时,应该将调试行打印到控制台,告诉您在哪里可以找到日志文件。请注意文件名中的主机名——在我的例子中是 localhost——这可能与您的配置不同。

The file that comes after Logging to is important. That's where MySQL logs its work.

130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'.
130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data

打开 localhost.err文件(同样,您的文件可能命名不同) ,即 tail -1 /Users/jacek/apps/mysql/data/localhost.err,找出套接字文件的名称-它应该是最后一行。

$ tail -1 /Users/jacek/apps/mysql/data/localhost.err
Version: '5.5.27'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)

请注意 socket:部分-这是您应该在 php.ini中使用的套接字文件。

还有另一种方法(有人说是更简单的方法)通过登录到 MySQL 并运行以确定套接字文件名的位置:

show variables like '%socket%';

使用 MySQL 支持-/etc/php.ini 配置 PHP5

说到 php.ini..。

/etc目录中有一个 /etc/php.ini.default文件,将其复制到 /etc/php.ini

sudo cp /etc/php.ini.default /etc/php.ini

打开 /etc/php.ini寻找 Default _ socket

sudo vi /etc/php.ini

mysql.default_socket的默认值是 /var/mysql/mysql.sock。您应该将其更改为您之前注意到的值-在我的例子中是 /tmp/mysql.sock

替换 /etc/php.ini文件以反映套接字文件的名称:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

最终确认

重新启动 Apache HTTP。

sudo apachectl restart

如果没有与 PHP5相关的错误,请检查日志。没有错误意味着您已经完成了,使用 MySQL 的 PHP5应该可以正常工作。恭喜!

我也遇到了这个问题,然后我把“ localhost”修改为“127.0.0.1”,它就工作了。

我也有过类似的问题。
基本上,这里的问题是可能有两个 mysql 运行的实例。
A)在/etc/init.d 上运行一个
B)安装在/opt/light 上的灯
Solution :
步骤1:-使用命令“ Find/| grep mysqld”查找所有正在运行的 mysql 实例
步骤2:-使用服务 mysql stop 关闭在/etc/init.d 上运行的服务
步骤3:-重新启动您的灯服务使用/opt/light/lights 重新启动

你应该可以走了:)

在我的例子中,mysqli _ connect 有问题。
当我想要交流的时候
mysqli_connect('localhost', 'myuser','mypassword')
Mysqli _ connect _ error ()返回这个错误“ No such file or directory”

这招对我很管用 mysqli_connect('localhost:3306', 'myuser','mypassword')

Replacing 'localhost' to '127.0.0.1' in config file (db connection) helped!

错误2002意味着 MySQL 无法通过套接字文件(例如 /tmp/mysql.sock)连接到本地数据库服务器。

要找出套接字文件在哪里,运行:

mysql_config --socket

然后再次检查您的应用程序是使用正确的 Unix 套接字文件还是通过 TCP/IP 端口进行连接。

然后再次检查您的 PHP 是否有正确的 MySQL 套接字设置:

php -i | grep mysql.default_socket

确保 文件存在

测试插座:

mysql --socket=/var/mysql/mysql.sock

如果 Unix 套接字是错误的或不存在,您可以符号链接它,例如:

ln -vs /Applications/MAMP/tmp/mysql/mysql.sock /var/mysql/mysql.sock

或更正配置文件(例如 php.ini)。

要直接从 PHP 测试 PDO连接,可以运行:

php -r "new PDO('mysql:host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

还要检查 Apache 和 CLI (命令行界面)之间的配置,因为配置可能不同。

可能是服务器正在运行,但是您尝试使用与服务器正在监听的 TCP/IP 端口、命名管道或 Unix 套接字文件不同的端口进行连接。要纠正需要调用客户端程序(例如,指定 --port选项)来指示正确的端口号,或正确的命名管道或 Unix 套接字文件(例如,--socket选项)。

见: 连接到 MySQL 的故障排除


其他可以帮助跟踪问题的实用程序/命令:

  • mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • xdebug.ini中使用 XDebug 和 xdebug.show_exception_trace=1
  • 在 OS X 上尝试 sudo dtruss -fn mysqld,在 Linux 上使用 strace进行调试
  • 检查 Unix 套接字的权限: stat $(mysql_config --socket)以及是否有足够的空闲空间(df -h)。
  • 重新启动 MySQL。
  • 检查 net.core.somaxconn

马提亚斯 D 的答案在这里上扩展,我能够在 MySQL 和 MariaDB 上解析这个 2002年错误,使用以下命令的精确路径:

首先将 实际路径放入 MySQL 套接字:

netstat -ln | grep -o -m 1 '/.*mysql.sock'

然后去看 PHP 路径:

php -r 'echo ini_get("mysql.default_socket") . "\n";'

使用 output of these two commands,将它们连接起来:

sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock

如果返回 No such file or directory,你只需要创建到 PHP mysql.sock 的路径,例如,如果你的路径是 /var/mysql/mysql.sock,你将运行:

sudo mkdir -p /var/mysql

Then try the Sudo In command again.

确保本地服务器(MAMP、 XAMPP、 WAMP 等)正在运行。

在 Mac 上,在做所有艰苦的工作之前,只需检查 System Preferences > MySQL中的设置。通常情况下,自从 The MySQL Server Instance is stopped以来,我经历过团队遇到这个问题。

单击 Start MySQL Server按钮,奇迹就会发生。

我在我的服务器上使用 PHP-FPM 或多个 PHP 版本。在我的案例中,我更新 mysqli 值,因为没有 mysql 默认套接字参数:

mysqli.default_socket

致:

mysql.default_socket = /path/to/mysql.sock

thanks to @Alec Gorge

我也有同样的问题。我的套接字最终在/tmp/mysql.sock 中找到。然后我将该路径添加到 php.ini。我通过检查 MySQLWorkbench 中的页面“ Server Status”找到了这个套接字。如果您的套接字不在/tmp/MySQL.sock 中,那么也许 MySQL Workbench 可以告诉您它在哪里?(允许您使用 MySQL 工作台...)

I've installed MySQL using installer. In fact, there was no data directory alongside 'bin' directory.

因此,我 手动创建“ C: Program Files MySQL MySQL Server 8.0”下的“ data”目录。它工作(按照 https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html中建议的步骤更改 root 密码)。

Restarting the mysql server might help. In my case, restarting the server saved a lot of time.

service mysql restart

P.S.-对非 root 用户使用 sudo service mysql restart

启用和启动 Mariadb 服务

Sudo systemctl 启用 Mariadb.service

Sudo Systemctl 开始 Mariadb.service

Digital Ocean MySql 2002-no-such-file-or-directory

添加文件 /etc/mysql/my.cnf的这一端

[mysqld]
innodb_force_recovery = 1

重新启动 MySql

service mysql restart

也许我回答这个问题有点晚了,但是解决我的问题的方法是安装 mysql-server

sudo apt-get install mysql-server

在花了5个多小时后,我找到了这个解决方案,帮助我继续前进。 我希望这个能帮到一些人,如果最好的答案对他们没有帮助的话

首先检查 MySQL 服务器是否运行。如果运行,然后检查套接字路径登录到 MySQL 通过命令行。

mysql -uUSER -pPASSWORD

那么

显示诸如“套接字”之类的变量;

您将找到 mysql 套接字的路径,您可以在下面的连接字符串中进一步使用该路径:

$con = mysqli _ connect (‘ localhost’,‘ USER’,‘ PASSWORD’,‘ path of 插座档案」) ;

如果 MySQL 没有运行。那么请共享错误日志,您将得到进一步的故障排除。

利用 localhost127.0.0.1不稳定性解决了该问题