Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录
Posted
技术标签:
【中文标题】Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录【英文标题】:Laravel 7 SQLSTATE[HY000] [2002] No such file or directory 【发布时间】:2020-12-15 08:57:18 【问题描述】:我在本地 (MAMP) 上开发了一个 laravel 7 应用程序。我现在想在我的网站托管帐户(apache2、php7.4、mysql 服务器)上进行设置。我做了一个 git pull 来拉下所有文件,现在当我做一个
php artisan migrate
我收到一条错误提示
SQLSTATE[HY000] [2002] No such file or directory (SQL: create table `migrations` (`id` int unsigned not null auto_increment primary key, `migration` varchar(191) not null, `batch` int not null) default character set utf8mb4 collate 'utf8mb4_unicode_ci')
我能够登录到托管服务器上的 phpmyadmin 并在那里看到我的空数据库。 我的 env 文件如下所示:
DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=commandcenterdb
DB_USERNAME=****
DB_PASSWORD=******
我的 config/database.php 文件看起来像这样
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'localhost'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE',' commandcenterdb'),
'username' => env('DB_USERNAME', '*****'),
'password' => env('DB_PASSWORD', '********'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => false,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
【问题讨论】:
你见过this answer吗?这是一个较旧的 Laravel 版本,他们必须在 database.php 和 env 文件中将localhost
更改为 127.0.0.1
(你也有 localhost
)。
是的,我知道如何使用 *** 上的搜索功能 :) 我尝试了该帖子中的内容,但后来我收到一条错误消息,提示连接被拒绝,所以我想可能是因为那是旧版本的Laravel 那不是 L7 的正确答案吗?如果我创建一个通过 pdo 方法连接到 mysql 的常规 php 文件,它可以工作,所以我知道我的凭据是正确的。
我遇到了类似的问题,虽然我使用的是 Docker,但我不确定 this is 是否相关。
【参考方案1】:
我在 Mac 上使用 MAMP 时遇到了同样的错误
SQLSTATE[HY000] [2002] No such file or directory (SQL: select * from information_schema.tables where table_schema = php-laravel and table_name = migrations)
我通过在.env
文件上添加 DB_SOCKET 解决了这个问题
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=your-database-name
DB_USERNAME=your-username
DB_PASSWORD=your-password
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
如果不起作用,请尝试修改 config/database.php
文件上的字符集和排序规则
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
]
【讨论】:
【参考方案2】:它也值得交叉检查,我在 .env 中有 UNIX_SOCKET 而不是 DB_SOCKET
【讨论】:
以上是关于Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 7 SQLSTATE[HY000] [2002] 没有这样的文件或目录
Laravel 5.7 迁移错误:SQLSTATE[HY000] [2002] No such file or directory
SQLSTATE[HY000] [1049] 未知数据库 'laravel'
Laravel:SQLSTATE [HY000] [2002] 连接被拒绝