我正在尝试设置WordPress.我运行Apache和MySQL,帐户和数据库都已设置完毕.我试图建立一个简单的连接:
我总是得到这个:
错误:2002 - 没有这样的文件或目录
它可以谈论什么文件或目录?
我使用的是内置Apache的OS X Snow Leopard.我使用x86_64 dmg安装了MySQL.
更新:我发现套接字位于/tmp/mysql.sock,所以在php.ini中,我用它替换了所有错误路径.
我有一个类似的问题,并能够通过解决我的mysql 127.0.0.1
而不是解决它localhost
.
这可能意味着我在主机设置中出了问题,但是这个快速解决方法让我现在就开始了.
如果您使用Linux:mysql.sock文件的路径是错误的.这通常是因为您正在使用(LAMPP)XAMPP而它不在/tmp/mysql.sock中
打开php.ini文件并找到以下行:
mysql.default_socket
并成功
mysql.default_socket = /path/to/mysql.sock
这适用于Mac OS X,具有Apache HTTP的本机安装和MySQL的自定义安装.
答案基于@ alec-gorge的出色响应,但由于我不得不谷歌一些特定的更改,以便在我的配置中配置它,主要是Mac OS X特定的,我想我会在这里添加它是为了完整性.
确保启用了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%';
说到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应该工作正常.恭喜!
在配置文件(db connection)中将'localhost'替换为'127.0.0.1'有帮助!
首先,确保MySQL正在运行.命令:mysqld start
如果你仍然无法连接那么:你的/etc/my.cnf是什么样的?
其他2个帖子是正确的,因为你需要检查你的套接字,因为2002是套接字错误.
设置LAMP的一个很棒的教程是:http://library.linode.com/lamp-guides/centos-5.3/index-print
重启mysql服务器可能会有所帮助.在我的情况下,重新启动服务器节省了大量时间.
service mysql restart
PS- sudo service mysql restart
用于非root用户.
不,它可以帮助你多,但在最近的版本(甚至更少最近的MySQL),错误代码2002的意思是"无法通过socket [名称的插座]连接到本地MySQL服务器",这样可能会告诉你多一点.
扩展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命令.
我检查你的php.ini文件并验证mysql.default_socket是否设置正确,并验证你的mysqld是否正确配置了它可以访问的套接字文件.典型的默认值是"/tmp/mysql.sock".
我也遇到了这个问题,然后我将'localhost'修改为'127.0.0.1',它的工作原理.
在我的情况下,我有mysqli_connect的问题.
当我想连接
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error()时返回此错误"没有这样的文件或目录"
这对我有用
mysqli_connect('localhost:3306', 'myuser','mypassword')