我正在尝试设置WordPress。我运行Apache和MySQL,帐户和数据库都已设置完毕。我试图建立一个简单的连接:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
我总是得到这个:
错误:2002 - 没有这样的文件或 目录
它可以谈论什么文件或目录?
我使用的是内置Apache的OS X Snow Leopard。我使用x86_64 dmg安装了MySQL。
更新:我发现套接字位于/tmp/mysql.sock,所以在php.ini中,我用它替换了所有错误路径。
答案 0 :(得分:130)
我遇到了类似的问题,并且能够通过使用127.0.0.1
而不是localhost
来解决我的mysql来解决这个问题。
这可能意味着我的主机设置出现了问题,但这个快速修复让我现在就开始了。
答案 1 :(得分:89)
如果使用Linux:mysql.sock文件的路径错误。这通常是因为你使用的是(LAMPP)XAMPP而且它不在/tmp/mysql.sock中
打开php.ini文件并找到以下行:
mysql.default_socket
并制作
mysql.default_socket = /path/to/mysql.sock
答案 2 :(得分:36)
这是针对 Mac OS X 的本地安装的Apache HTTP 和自定义安装的MySQL 。
答案基于@ alec-gorge的出色响应,但由于我必须谷歌一些特定的更改才能在我的配置中配置,主要是Mac OS X特定的,我想我会在这里添加它为了完整性。
确保在/etc/apache2/httpd.conf
。
使用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
当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应该工作正常。恭喜!
答案 3 :(得分:13)
在配置文件(db connection)中将'localhost'替换为'127.0.0.1'有帮助!
答案 4 :(得分:9)
首先,确保MySQL正在运行。命令:mysqld start
如果仍然无法连接: 你的/etc/my.cnf是什么样的?
其他2个帖子是正确的,因为您需要检查套接字,因为2002是套接字错误。
关于设置LAMP的一个很好的教程是:http://library.linode.com/lamp-guides/centos-5.3/index-print
答案 5 :(得分:6)
不是它对你有多大帮助,但在MySQL的recent versions(甚至是less recent)中,错误代码2002意味着“无法通过套接字连接到本地MySQL服务器[name-of- socket]“,这样可能会告诉你更多。
答案 6 :(得分:6)
扩展Matthias D's answer here我能够使用以下命令在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 命令。
答案 7 :(得分:6)
在我的情况下我遇到了mysqli_connect的问题。
当我想连接时
mysqli_connect('localhost:3306', 'myuser','mypassword')
mysqli_connect_error()返回此错误&#34;没有这样的文件或目录&#34;
{ static void Main(string[] args)
{ Console.WriteLine("shanzzzh@gmail.com");
MailAddress to = new MailAddress(Console.ReadLine());
Console.WriteLine("Mail From");
MailAddress from = new MailAddress(Console.ReadLine());
MailMessage mail = new MailMessage(from,to );
Console.WriteLine("Subject");
mail.Subject = Console.ReadLine()
Console.WriteLine("Your Message");
mail.Body = Console.ReadLine()
SmtpClient smtp = new SmtpClient();
smtp.Host = "pod51014.outlook.com";
smtp.Port = 587
smtp.Credentials = new NetworkCredential( "*********", "******");
smtp.EnableSsl = true;
Console.WriteLine("Sending email...");
smtp.Send(mail);
}
}
答案 8 :(得分:6)
我也遇到了这个问题,然后我将'localhost'修改为'127.0.0.1',它有效。
答案 9 :(得分:6)
我检查你的php.ini文件并验证mysql.default_socket是否设置正确,并验证你的mysqld是否正确配置了它可以访问的套接字文件。典型的默认值是“/tmp/mysql.sock”。
答案 10 :(得分:5)
重启mysql服务器可能会有所帮助。就我而言,重新启动服务器节省了大量时间。
service mysql restart
P.S.-对非root用户使用sudo service mysql restart
。
答案 11 :(得分:3)
错误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套接字文件不同的TCP / IP端口进行连接。要纠正您需要调用客户端程序(例如,指定
--port
选项)以指示正确的端口号,或正确的命名管道或Unix套接字文件(例如--socket
选项)。
请参阅:Troubleshooting Problems Connecting to 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.show_exception_trace=1
xdebug.ini
的XDebug
sudo dtruss -fn mysqld
,使用strace
stat $(mysql_config --socket)
以及是否有足够的可用空间(df -h
)。net.core.somaxconn
。答案 12 :(得分:2)
确保您的本地服务器(MAMP,XAMPP,WAMP等)正在运行。
答案 13 :(得分:0)
我遇到了类似的问题
基本上这里的问题是可能有两个mysql运行实例
A)一个在/etc/init.d上运行
B)灯泡安装在/ opt / lamp
解决方案:
步骤1: - 使用commnad&#34; find / |查找所有运行mysql的实例grep mysqld&#34;
步骤2: - 使用service mysql stop关闭在/etc/init.d上运行的服务
步骤3: - 使用/ opt / lamp / lamp restart
你应该好好去:))
答案 14 :(得分:0)
在Mac上,在完成所有艰苦工作之前,只需在System Preferences > MySQL
中检查您的设置即可。通常情况下,自The MySQL Server Instance is stopped
Start MySQL Server
以来,我经历过团队遇到此问题。
点击a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
按钮,就会发生魔术。
答案 15 :(得分:0)
我在我的服务器中使用PHP-FPM或多个php版本。在我的情况下,我更新mysqli值,因为没有mysql默认套接字参数:
mysqli.default_socket
到:
mysql.default_socket = /path/to/mysql.sock
感谢@Alec Gorge
答案 16 :(得分:0)
我遇到了同样的问题。我的套接字最终在/tmp/mysql.sock中找到。然后我添加了php.ini的路径。我在MySQL Workbench中检查了“服务器状态”页面,找到了那里的套接字。如果您的套接字不在/tmp/mysql.sock中,那么MySQL Workbench可能会告诉您它在哪里? (当然你使用MySQL Workbench ...)
答案 17 :(得分:0)
我使用安装程序安装了MySQL。事实上,'bin'目录旁边没有数据目录。
所以,我手动创建“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密码。
答案 18 :(得分:0)
数字海洋 MySql 2002-no-such-file-or-directory
添加文件/etc/mysql/my.cnf
的结尾
[mysqld]
innodb_force_recovery = 1
重新启动MySql
service mysql restart
答案 19 :(得分:0)
也许我来不及回答这个问题,但是解决我问题的是安装mysql-server
sudo apt-get install mysql-server
花费了5多个小时后,我发现此解决方案有助于我继续前进。 我希望这对某人有帮助,如果最重要的答案不能帮助他们
答案 20 :(得分:0)
首先检查MySQL服务器是否正在运行。如果正在运行,则通过命令行登录MySQL来检查套接字路径。
mysql -uUSER -pPASSWORD
然后
显示类似“ socket”的变量;
您将找到mysql套接字的路径,您可以在连接字符串中进一步使用它,如下所示:
$ conn = mysqli_connect('localhost','USER','PASSWORD','路径 套接字文件');
如果MySQL未运行。然后,请分享您要进一步解决的错误日志。
答案 21 :(得分:-1)
我在Linux服务器上也遇到了同样的问题。 帮助我的是“ sudo reboot ”命令,该命令用于重新引导Linux服务器。
答案 22 :(得分:-2)
启用并启动mariadb服务
sudo systemctl启用mariadb.service
sudo systemctl启动mariadb.service