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

2019-05-08 15:44发布

我试图建立的WordPress。 我有Apache和MySQL正在运行,且帐户和数据库都成立。 我试图做一个简单的连接:

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

我总是得到这样的:

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

什么文件或目录会不会是在说什么?

我在一个OS X雪豹,使用内置的Apache。 我使用x86_64的DMG安装了MySQL。

更新:我发现插座是/tmp/mysql.sock,所以在php.ini中,我换成了错误的道路的所有地方。

Answer 1:

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

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

mysql.default_socket

并使它

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


Answer 2:

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

这可能意味着我有什么不对我的主机设置,但这种速战速决的get就是我要去的现在。



Answer 3:

这是为Mac OS XApache HTTP的本机安装MySQL的自定义安装

答案是基于@苏有朋,峡谷出色的响应,但因为我Google了一些具体的变化已经在我的配置中配置,主要的Mac OS X专用的,我想我会在这里添加它的完整性的缘故。

启用的Apache HTTP支持PHP5

确保PHP5支持启用/etc/apache2/httpd.conf

编辑与文件sudo vi /etc/apache2/httpd.conf (当被问及输入密码),并取消(删除;从年初)行加载php5_module模块。

LoadModule php5_module libexec/apache2/libphp5.so

与启动Apache HTTP sudo apachectl start (或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在我的情况-这可能是您的配置不同。

之后到来的文件Logging to是很重要的。 这就是MySQL的记录工作。

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%';

配置PHP5的MySQL的支持 - /etc/php.ini中

说到php.ini中的...

/etc目录下有/etc/php.ini.default文件。 复制它为/etc/php.ini。

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

打开/etc/php.ini ,寻找mysql.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的错误。 没有错误意味着你做,PHP5使用MySQL应该能正常运行。 恭喜!



Answer 4:

在配置文件替换“本地主机”到“127.0.0.1”(数据库连接)帮助!



Answer 5:

首先,确保MySQL正在运行。 命令:mysqld的开始

如果仍然无法连接,那么:什么是您的/etc/my.cnf样子?

其他2个职位是在你需要检查你的插座,因为2002年是一个套接字错误是正确的。

关于建立LAMP一个伟大的教程: http://library.linode.com/lamp-guides/centos-5.3/index-print



Answer 6:

我会检查你的php.ini文件并验证mysql.default_socket设置正确,并验证你的mysqld正确使用套接字文件,它可以访问配置。 典型的默认值是“/tmp/mysql.sock”。



Answer 7:

不,它可以帮助你多,但在最近的版本 (甚至更少最近的MySQL),错误代码2002的意思是“无法通过socket [名称的插座]连接到本地MySQL服务器”,这样可能会告诉你多一点。



Answer 8:

我遇到了这个问题太,然后我修改“本地主机”到“127.0.0.1”,它的工作原理。



Answer 9:

在我的情况我有mysqli_connect问题。
当我想连接
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error()返回我这个错误“没有这样的文件或目录”

这个工作对我来说mysqli_connect('localhost:3306', 'myuser','mypassword')



Answer 10:

扩大对马蒂亚斯D的答案在这里 ,我能够解决这个错误2002年在MySQL和MariaDB的使用这些命令的确切路径:

第一次进入了MySQL套接字的实际路径

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

然后让PHP路径

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

使用这两个命令的输出 ,连接起来:

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

然后再次尝试通过sudo ln命令。



Answer 11:

重新启动MySQL服务器可能会有帮助。 在我的情况下,重新启动服务器节省了大量的时间。

service mysql restart

PS-使用sudo service mysql restart对于非root用户。



Answer 12:

错误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 )。

为了测试PDO直接从PHP连接,您可以运行:

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

还检查Apache和CLI(命令行接口)之间的结构中,作为配置可以不同。

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

请参阅: 故障排除连接到MySQL


其他utils的/命令,它可以帮助追踪问题:

  • mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
  • netstat -ln | grep mysql
  • php -r "phpinfo();" | grep mysql
  • php -i | grep mysql
  • 使用了XDebug与xdebug.show_exception_trace=1xdebug.ini
  • 在OS X尝试sudo dtruss -fn mysqld ,在Linux上调试与strace
  • 在Unix套接字检查权限: stat $(mysql_config --socket)如果你已经足够的可用空间( df -h
  • 重新启动你的MySQL。
  • 检查net.core.somaxconn


Answer 13:

确保您的本地服务器(MAMP,XAMPP,WAMP,等..)运行。



Answer 14:

我有一个类似的问题。
基本上,这里的问题是有可能的MySQL运行的两个实例。
A)在/etc/init.d中一个正在运行
B)灯被安装在/ opt /灯
解决方案:
第1步: - 查找所有MySQL运行使用commnad情况下, “查找/ | grep的的mysqld”
第2步: - 关闭使用MySQL的服务停在/etc/init.d中运行的服务
第3步: - 使用重新启动灯管服务的/ opt /灯泡/灯管重启

你要善于去:)



Answer 15:

在Mac上,做所有的辛勤工作之前,简单地检查你的设置System Preferences > MySQL 。 很多时候,我已经经历了运行到这个问题,因为球队The MySQL Server Instance is stopped

单击Start MySQL Server按钮,和魔术会发生。



Answer 16:

即时通讯使用PHP-FPM或多个PHP版本在我的服务器。 对我来说,我更新mysqli的价值,因为没有mysql的默认套接字参数:

mysqli.default_socket

至 :

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

感谢@Alec峡谷



Answer 17:

我有同样的问题。 我的插座/tmp/mysql.sock最终被发现。 然后我说这条道路为php.ini。 我发现插座有从检查MySQL工作台在网页“服务器状态”。 如果您的插座不/tmp/mysql.sock那么也许MySQL工作台可以告诉你它在哪里? (就算你使用MySQL工作台...)



Answer 18:

我已经使用安装程序安装了MySQL。 事实上,有一起“bin”目录中没有数据目录。

所以,我手动创建的'数据'目录下的“C:\ Program Files文件\的MySQL \ MySQL服务器8.0”。 和它的工作(以下变化对建议的步骤root密码https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html 。



文章来源: MySQL connection not working: 2002 No such file or directory