我试图建立的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 X与Apache 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=1
在xdebug.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