如果我收到类似的错误消息:“连接失败:SQLSTATE[HY000] [2002] 没有这个文件或目录”,我应该怎么办?

18 浏览
0 Comments

如果我收到类似的错误消息:“连接失败:SQLSTATE[HY000] [2002] 没有这个文件或目录”,我应该怎么办?

我相信我已经成功地将我的(非常基本的)网站部署到fortrabbit,但是一旦我连接到SSH运行一些命令(如php artisan migratephp artisan db:seed),就会收到一个错误消息:

[PDOException]
SQLSTATE[HY000] [2002] 没有这个文件或目录

在某个时候,迁移一定是成功的,因为我的表格都在那里 - 但这并不能解释为什么现在对我来说不起作用。

0
0 Comments

如果遇到类似于“连接失败: 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的情况。

以上是这个问题的原因和解决方法,希望对大家有所帮助。

0
0 Comments

当出现错误消息"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,才能运行。

0
0 Comments

当出现类似"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服务没有运行时,也会出现这个问题。

0