如果我收到类似的错误消息:“连接失败:SQLSTATE[HY000] [2002] 没有这个文件或目录”,我应该怎么办?
如果遇到类似于“连接失败: SQLSTATE[HY000] [2002] 没有这个文件或目录”的错误消息,应该怎么办?
问题出现的原因是PHP和MySQL无法连接。
解决方法如下:
1. 打开终端并连接到MySQL:
mysql -u root -p
2. 输入相关密码后,进入MySQL命令行,并输入以下命令:
mysql> show variables like '%sock%'
3. 会得到类似以下结果:
+-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+
4. 保留最后一行的值:
/tmp/mysql.sock
5. 在Laravel项目文件夹中,找到名为“database.php”的文件,这是配置数据库连接参数的地方。在“mysql”部分的末尾添加以下行:
'unix_socket' => '/tmp/mysql.sock'
6. 最终的配置应该类似于:
'mysql' => array( 'driver' => 'mysql', 'host' => 'localhost', 'database' => 'SchoolBoard', 'username' => 'root', 'password' => 'venturaa', 'charset' => 'utf8', 'collation' => 'utf8_unicode_ci', 'prefix' => '', 'unix_socket' => '/tmp/mysql.sock', ),
保存更改后,重新加载页面,问题应该得到解决。
此方法适用于Mac OS X 10.10 Yosemite系统下使用Apache服务器和预装PHP的情况。
以上是这个问题的原因和解决方法,希望对大家有所帮助。
当出现错误消息"Connection failed: SQLSTATE[HY000] [2002] No such file or directory"时,可能的原因是MySQL服务器未运行。首先验证服务器是否正在运行。如果服务器正在运行,请按照以下建议进行操作:
对于Laravel 4,将app/config/database.php
文件中的"host"更改为"127.0.0.1";
对于Laravel 5+,将.env
文件中的"DB_HOST"更改为"127.0.0.1";
某些情况下这个解决方案对我也起作用。但我不知道为什么默认情况下"localhost"不起作用,但我在一个类似问题的Symfony2帖子中找到了这个答案。
一些人问为什么这个修复方法有效,所以我对这个问题进行了一些研究。在这个帖子中解释了它们使用不同的连接类型。
问题的出现是因为"localhost"使用UNIX套接字,无法在标准目录中找到数据库。然而,"127.0.0.1"使用TCP(传输控制协议),这意味着它通过计算机上的"本地网络"运行,比UNIX套接字更可靠。
这对我也起作用,但我能够通过mysql --host=localhost命令行连接,但不能通过PDO连接。
我很想知道为什么localhost
不起作用,而127.0.0.1
起作用?
在MAMP系统上运行终端上的PHP文件时,这对我起作用。它在网页中运行正常,但作为命令行文件时,直到我将localhost更改为'127.0.0.1'才起作用。
如果您使用的是Homestead,请检查Homestead.yaml
文件中的正确IP地址。在最新版本的Homestead中,默认值为192.168.10.10
,因此使用127.0.0.1
会导致相同的错误。
对于MAMP用户,对我来说,我必须将端口号(8889)添加到主机中,即127.0.0.1:8889
。奇怪的是,当通过Web浏览器访问我的应用程序时,IP地址对我不起作用,但localhost
起作用-对于CLI则相反。
这取决于在MAMP首选项中指定的端口,如果您转到首选项,可以单击按钮将默认MAMP端口设置为端口80,因此不需要将端口号设置为127.0.0.1。但是,如果您设置了另一个端口,如8889,您将不得不附加该端口,如127.0.0.1:8889。我通常将其设置为默认端口80,因为这样更容易。但是,这是个好主意。
这对我起了作用,我还想确定一下,如果我将Homestead.yaml文件中的IP更改为127.0.0.1,是否会遇到任何问题?
那实际上应该设置的内容,我更新了答案,因为应该设置为127.0.0.1,因为它在homestead vm中本地运行。
感谢您,这对我来说是个问题,我尝试了几天!(在mac上运行xampp)
解决方法是在.env中设置:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=null DB_DATABASE=yourdatabase DB_USERNAME=youruder DB_PASSWORD=yourpassword
我使用sail部署了laravel项目,在我的情况下,我必须将localhost/127.0.0.1更改为mysql容器的名称(例如myproject_mysql)。有趣的是:只有从容器中运行迁移和其他php artisan数据库相关命令,或者在运行迁移之前再次将env DB_HOST更改为127.0.0.1,才能运行。
对于Yii2项目也适用相同的解决方案!
将.env中的HOST参数更改为127.0.0.1在Laravel 5.6上完美运行。
“在你的计算机上,"本地网络"比UNIX套接字更可靠。”根据我的了解,这并不是关于可靠性,而是关于配置(至少在我的情况下):通过UNIX套接字的访问可能被禁止,而TCP则可以工作。
在.env中设置:DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=null DB_DATABASE=yourdatabase DB_USERNAME=youruder DB_PASSWORD=yourpassword
我使用sail部署了laravel项目,在我的情况下,我必须将localhost/127.0.0.1更改为mysql容器的名称(例如myproject_mysql)。有趣的是:只有从容器中运行迁移和其他php artisan数据库相关命令,或者在运行迁移之前再次将env DB_HOST更改为127.0.0.1,才能运行。
当出现类似"Connection failed: SQLSTATE[HY000] [2002] No such file or directory"的错误消息时,这意味着尝试通过套接字进行MySQL连接(不支持)。
在Laravel(artisan)的上下文中,你可能想要使用不同的/正确的环境。例如:php artisan migrate --env=production
(或任何其他环境)。在这里查看here。
这是我的问题的解决方法,我们公司的其中一位开发人员不使用Homestead,而是通过套接字连接到mysql。我在app/database.php文件中删除了套接字配置。问题解决了。
我只需要在php.ini中启用mysqli.so扩展。
我需要在config/database.php中添加"'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock'".
你好社区,我遇到了这个错误,尽管我没有使用laravel,你能看看这里的问题:stackoverflow.com/questions/60796332/…
当你使用套接字作为MySQL端点,并且MySQL服务没有运行时,也会出现这个问题。