当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《MySQL连接不起作用:2002没有这样的文件或目录》经验,为你挑选了11个好方法。

我正在尝试设置WordPress.我运行Apache和MySQL,帐户和数据库都已设置完毕.我试图建立一个简单的连接:


我总是得到这个:

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

它可以谈论什么文件或目录?

我使用的是内置Apache的OS X Snow Leopard.我使用x86_64 dmg安装了MySQL.

更新:我发现套接字位于/tmp/mysql.sock,所以在php.ini中,我用它替换了所有错误路径.



1> bryan kenned..:

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

这可能意味着我在主机设置中出了问题,但是这个快速解决方法让我现在就开始了.


"主机名localhost具有特殊含义.它必然使用Unix域套接字.使用主机名localhost打开TCP/IP连接是不可能的,你必须使用127.0.0.1." - http://php.net/manual/en/mysqli.quickstart.connections.php.所以基本上没有什么东西不能连接到允许`localhost`工作并且TCP/IP正常工作的Unix域套接字,因此将其更改为TCP/IP地址`127.0.0.1`将起作用.
我检查了我的hosts文件,发现了一行`code`127.0.0.1 localhost`code`.这让我很好奇为什么通过localhost连接无法正常工作.如果有人能够启发我,我会很高兴.
这是因为php.ini中的mysql.default_socket是错误的.运行"php -i | grep mysql.default_socket"

2> Alec Gorge..:

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

打开php.ini文件并找到以下行:

mysql.default_socket

并成功

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


如果您不确定,请尝试将/var/lib/mysql/mysql.sock作为套接字的新路径.
注意如果与mysqli连接,你可能需要设置mysqli.default_socket = /path/to/mysql.sock
"主机名localhost具有特殊含义.它必然使用Unix域套接字.使用主机名localhost打开TCP/IP连接是不可能的,你必须使用127.0.0.1." - http://php.net/manual/en/mysqli.quickstart.connections.php.所以基本上没有什么东西不能连接到允许`localhost`工作并且TCP/IP正常工作的Unix域套接字,因此将其更改为TCP/IP地址`127.0.0.1`将起作用.
MySQL安装库存的默认套接字位置是/tmp/mysql.sock.

3> Jacek Laskow..:

这适用于Mac OS X,具有Apache HTTP本机安装MySQL的自定义安装.

答案基于@ alec-gorge的出色响应,但由于我不得不谷歌一些特定的更改,以便在我的配置中配置它,主要是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

查找套接字文件的名称

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

使用MySQL支持配置PHP5 - /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应该工作正常.恭喜!



4> 小智..:

在配置文件(db connection)中将'localhost'替换为'127.0.0.1'有帮助!



5> Todd Moses..:

首先,确保MySQL正在运行.命令:mysqld start

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

其他2个帖子是正确的,因为你需要检查你的套接字,因为2002是套接字错误.

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



6> 小智..:

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

service mysql restart

PS- sudo service mysql restart用于非root用户.



7> Arthur Reute..:

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



8> mattbell87..:

扩展Matthias D的答案在这里我能够使用这些命令在MySQL和MariaDB上使用确切的路径解决这个2002错误:

首先获取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命令.



9> Myles..:

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



10> JackSun..:

我也遇到了这个问题,然后我将'localhost'修改为'127.0.0.1',它的工作原理.



11> masoud2011..:

在我的情况下,我有mysqli_connect的问题.
当我想连接
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error()时返回此错误"没有这样的文件或目录"

这对我有用 mysqli_connect('localhost:3306', 'myuser','mypassword')

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有