运行迁移时“没有这样的文件或目录”或“不知道这样的主机”

Posted

技术标签:

【中文标题】运行迁移时“没有这样的文件或目录”或“不知道这样的主机”【英文标题】:"No such file or directory" or "No such host is known" when running migrations 【发布时间】:2018-03-06 13:23:27 【问题描述】:

我从名为 laravel 的 Laravel 5.4 数据库中删除了 migrations 表。当我运行php artisan migrate:install 时,我收到此错误:

[Illuminate\Database\QueryException]
SQLSTATE[HY000] [2002] No such file or directory
(SQL: select * from information_schema.tables where table_schema = laravel
    and table_name = migrations)

我删除并重新创建了数据库。我还跑了composer update。没有运气。我可以在 phpMyAdmin 中运行命令并手动创建表。

这个问题有时也会出现类似的 2002 错误:

[Illuminate\Database\QueryException]
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: No such host is known.
(SQL: select * from information_schema.tables where table_schema = laravel
    and table_name = migrations and table_type = 'BASE TABLE')
[Illuminate\Database\QueryException]
SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known
(SQL: select * from information_schema.tables where table_schema = laravel
    and table_name = migrations and table_type = 'BASE TABLE')

【问题讨论】:

这行得通。 ***.com/questions/29305502/… 这能回答你的问题吗? PDOException: SQLSTATE[HY000] [2002] No such file or directory 【参考方案1】:

如果您在.env 文件中使用localhost 作为DATABASE_HOST,请将其更改为127.0.0.1,然后运行php artisan config:clear,现在再次尝试php artisan migrate:install

【讨论】:

为什么 localhost 在 SequelAce 中有效,而在 .env 中无效?【参考方案2】:

针对我自己的问题发布解决方案:

我删除了文件夹并重新创建了代码库,确保将我的环境指向正确的数据库服务器。这次奏效了。我不确切知道导致原始错误的原因是什么。

【讨论】:

【参考方案3】:

这是我对.env 文件的推荐:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306

然后在Database.php添加文件夹位置:

'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),

最后,试试:

php artisan config:clear
php artisan migrate:install

【讨论】:

谢谢!你是救生员)【参考方案4】:

在某些情况下,这可能是因为 mysql 服务器没有运行。它发生在我使用 Laravel 5.7 并重新启动 mysql 服务器解决了它。对于 ubuntu,检查 mysql 服务器service mysql status 的状态。你可以使用命令service mysql restart重启mysql服务器

【讨论】:

【参考方案5】:

我在 macOS 上使用 MAMP,在将 localhost 编辑为 127.0.0.1 并将端口编辑为 8888 后,通过添加以下内容解决了这个问题

'unix_socket' => env('DB_SOCKET', '/Applications/MAMP/tmp/mysql/mysql.sock'),

到 config/database.php 文件。

【讨论】:

【参考方案6】:

如果您使用的是 MAMP Pro(MAMP 的免费版本并不总是必需的),那么最好将其添加到您的 .env 文件中:

DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock

这假设您的 MAMP 安装在 /Applications/MAMP 当然(默认)。

致谢:@Uncoke 对这个问题的评论

【讨论】:

【参考方案7】:

我通过在.env 文件中设置环境变量解决了这个问题:

DB_CONNECTION=mysql 
DB_HOST=mysql 
DB_PORT=3306 

其实我只是从DB_HOST=127.0.0.1改成了DB_HOST=mysql

【讨论】:

以上是关于运行迁移时“没有这样的文件或目录”或“不知道这样的主机”的主要内容,如果未能解决你的问题,请参考以下文章

导入失败:java.io.IOException:无法运行程序“hive”:错误=2,没有这样的文件或目录

php artisan migrate 没有这样的文件或目录

Laravel 迁移“没有这样的文件或目录”

Symfony3.4 / Doctrine迁移 - 驱动程序中发生异常:SQLSTATE [HY000] [2002]没有这样的文件或目录

Visual Studio 2013 迁移:无法打开包含文件:'dxerr8.h':没有这样的文件或目录

Laravel 6.0 迁移 - SQLSTATE[HY000] [2002] 没有这样的文件或目录