"No such file or directory" 或 "No such host is known" 当 运行 迁移时

"No such file or directory" or "No such host is known" when running migrations

我从名为 laravel 的 Laravel 5.4 数据库中删除了 migrations table。当我 运行 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 中的命令并手动创建 table。

这个问题有时也会出现类似的 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')

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

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

我删除了文件夹并重新创建了代码库,确保将我的环境指向正确的数据库服务器。这次成功了。我不知道到底是什么丢失导致了最初的错误。

这是我为 .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

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

重新启动 mysql 服务器

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

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

到config/database.php 文件。

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

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

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

来源:@Uncoke 在这个问题中的评论

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

DB_CONNECTION=mysql 
DB_HOST=mysql 
DB_PORT=3306 

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