SQLSTATE[HY000] [2002] Laravel宅基地内的连接被拒绝


SQLSTATE[HY000] [2002] Connection refused within Laravel homestead

使用 Mac OS X 和 Homestead 2.2.1 和 Laravel 5.2

在终端(在我的项目文件夹中的宅基地内(我可以做 php 工匠来查看所有可用的命令。当我尝试运行php artisan migration时,出现连接错误:
SQLSTATE[HY000] [2002] Connection refused


我已经使用这些.env设置了一个Laravel项目

DB_HOST=127.0.0.1
DB_DATABASE=tcv
DB_USERNAME=homestead
DB_PASSWORD=secret

我还尝试了本地主机的DB_HOST和根的DB_USERNAME和DB_PASSWORD。以及这些所有可能的变化放在一起!


在 Sequel Pro(数据库管理应用程序(中,我可以使用这些设置进行连接

Host       127.0.0.1
Username   homestead
Password   secret
Database   tcv
Port       33060

但是这个数据库显然是空的,因为我无法从终端迁移到它......

据我所知,这是一个配置问题,因为我可以使用 Sequel Pro 连接到它。但老实说,我不知道设置出了什么问题。

感谢您的帮助!

编辑
出于某种原因,我在将项目移动到 MAMP 并运行 php 工匠迁移时收到相同的SQLSTATE[HY000] [2002] Connection refused错误。
现在我完全迷失了...

我刚刚遇到了这个问题,发现将 .env 文件中的它从 127.0.0.1 更改为localhost修复了它。

DB_HOST=localhost

问题

在Laravel中,您可以config/database.php连接的所有设置所在的位置。在项目的根目录中还有一个.env文件(每个人都使用它来节省时间(。这包含可用于整个项目的变量。

在标准的 L5 项目中,config/database.php的 MySql 部分如下所示:

    'mysql' => [
        'driver'    => 'mysql',
        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'forge'),
        'username'  => env('DB_USERNAME', 'forge'),
        'password'  => env('DB_PASSWORD', ''),
        'charset'   => 'utf8',
        'collation' => 'utf8_unicode_ci',
        'prefix'    => '',
        'strict'    => false,
        'engine'    => null,
    ],

请注意,没有设置端口!

虽然在我的.env文件中我已经设置了DB_PORT=33060.但那value (3306)从未被读入config/database.php.
所以不要像我一样笨,忘记检查database.php文件。


修复
只需将'port' => env('DB_PORT', 3306),添加到您的配置/数据库中.php并在 .env 中设置该值,如下所示DB_PORT=3306

如果您在 mac OS 上使用 MAMP,请将以下行添加到您的 mysql 数据库配置文件中

'unix_socket' => env('DB_SOCKET', ''(,

并在您的 .env 文件上添加

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

使用localhost而不是127.0.0.1(在 .env 文件中(,然后运行命令:

php artisan config:cache

如果你的后端和数据库在 docker 上启动了

不要将 localhost 或 127.0.0.1 作为DB_HOST而是将指示数据库服务的已注册服务的名称放在 docker-compose 文件中。

例如,在我的

情况下,我用db替换了127.0.0.1,因为在我的docker-compose文件中,我将数据库的服务名称定义为db

我的码头工人组合看起来像那样

services:
    db: <------ This is the name of the DB_HOST
      container_name: admin_db
      image:mysql:5.7.22
    .
    .
    .

问题已解决

我遇到了同样的问题,只需将 .env 文件中的常量从 127.0.0.1 转换为localhost DB_HOST

只需按照以下行中给出的顺序执行此操作

DB_HOST = localhost .

无需将任何内容更改为config/database.php

别忘了跑步

php artisan config:clear

其他有问题的人的另一种解决方案。我的所有设置都正确,但由于某种原因我的更改没有更新。Laravel实际上缓存了配置文件(我觉得这完全愚蠢(。

这是我更新配置后的解决方案:

php artisan config:clear

我遇到了这个问题。与Sequel Pro连接时,我需要使用33060作为端口,但是在.env文件中必须3306 。我在 .env 文件中有33060。将其更改为3306并且有效。

这是一个简单的修复。您的 mysql 数据库已失去与服务器的连接。如果您正在运行本地服务器,请在终端中运行以下命令:

mysqld

这将重新连接您的数据库。然后(如果您使用的是自制软件(运行:

brew services start mysql

这将在登录时自动连接您的数据库。

就我而言,我在使用 docker 时遇到了同样的错误,诀窍在于DB_HOST=db .env文件中设置,其中 db 是运行数据库服务器的容器的名称。

我遇到了同样的问题,试试这个作品

DB_HOST=localhost

您的mysql可能尚未启动或未连接到端口3306

在我的情况下,此错误突然出现。在盯着那个神秘的错误时,我意识到,我试图在 vm 之外运行命令......

将所有配置放在 .env 文件上后,如果您已经运行了 php artisan serve请重新启动它

对我来说,

将凭据括在引号中就可以了

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE='zzz'
DB_USERNAME='yyy'
DB_PASSWORD='XXX'

当Laravel连接到Homestad盒子上的mysql并在本地环境中运行命令时:


DB_HOST=127.0.0.1应用需要DB_PORT=3306
迁移需要DB_PORT=33060否则会提供Connection refused
phpunit需要DB_PORT=33060否则会给出Connection refused


DB_HOST=localhost该应用程序适用于DB_PORT=3306DB_PORT=33060
迁移无法运行
phpunit 无法运行

请记住,phpunit 从.env.testing文件中获取其值(如果存在(,否则从应用程序根文件夹上的phpunit.xml文件中获取其值

我,我使用流浪者,但我在盒子外面执行 php 工匠,所以基本上它没有权限

我可能是因为你可能很久没有重新启动 PHP 工匠

所以在进行数据库更改和配置后:清除修补可以正常工作

但是要使浏览器反映新的数据库连接,您需要重新运行

PHP 工匠服务

  1. 从任务管理器终止 SQL LD
  2. 从 xampp 控制面板停止 MySQL 并重新启动它

如果仍然抛出相同的问题,请从根文件夹运行

php artisan cache:clear
php artisan config:cache
php artisan serve
  1. 如果您仍然遇到问题,请检查您是否正在使用多个SQL Server副本,例如通过Ubuntu应用程序,如果是,请停止Ubuntu中的MySQL服务器

    sudo service MySQL stop

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=8080
DB_DATABASE=flap_safety
DB_USERNAME=root
DB_PASSWORD=mysql

上面给出的是我的 .env

    'mysql' => [
        'driver' => 'mysql',
        'url' => env('DATABASE_URL'),
        'host' => env('DB_HOST', 'mysql'),
       // 'port' => env('DB_PORT', '8080'),
        'database' => env('DB_DATABASE', 'forge'),
        'username' => env('DB_USERNAME', 'forge'),
        'password' => env('DB_PASSWORD', 'mysql'),
        'unix_socket' => env('DB_SOCKET', ''),
        'charset' => 'utf8mb4',
        'collation' => 'utf8mb4_unicode_ci',
        'prefix' => '',
        'prefix_indexes' => true,
        'strict' => true,
        'engine' => null,
        'options' => extension_loaded('pdo_mysql') ? array_filter([
            PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
        ]) : [],
    ],

上面给出的是我的数据库.php文件。 我只是从数据库中注释掉了端口.php它对我有用。

如果您

使用的是Homestead那么您应该使用默认的mysql端口运行它。因此,您应该在 .env 文件中使用 DB_PORT=3306,而不是使用 DB_PORT=33060 。另外,请记住在宅基地安装中运行php artisan migrate命令,一切应该没问题。

希望有帮助。

唯一为我解决的方法是将连接详细信息放在配置/数据库中.php而不是 .env 文件。希望这有帮助

我遇到了类似的问题,这里没有建议对我有帮助。解决我的问题的是将应用程序名称和数据库主机名设置为相同的值。就我而言,127.0.0.1 工作正常。

APP_URL=127.0.0.1
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=zzz
DB_USERNAME=yyy
DB_PASSWORD=XXX
<</div> div class="answers">

好的更新,似乎主机不是问题,而是端口。

因此,它实际上是用于浏览器测试的端口3306,但用于终端和Sequel Pro 33060。它是否与将其添加到Homestead.yaml中并将其设置在此处有关?

在阅读与Laravel相关的设置时,它说:

MySQL:33060 →转发到 3306

我遇到了

SQLSTATE[HY000] [2002] 连接被拒绝(SQL:从中选择 * 项目(

原因是我没有启动MySQL服务器。

检查MySQL是否正在运行作为解决错误的第一步可能会有所帮助。

我发现我的服务器只需要重新启动并"砰">它已修复。

如果您像我一样使用 Homestead,请不要忘记在运行工匠测试之前先 ssh 它。

我认为它甚至不读取配置/数据库.php。一旦将我的条目编辑到 .env 文件中,它就开始工作了。

万一这对将来对某人有帮助......我必须使用WSL运行工匠命令等,但MySQL存在于我的Windows环境中。我在正确的术语上挣扎,但我的大脑说:"我不在乎你是否认为你是一个虚拟机,你很字面意思,就在我面前,所以当我说连接到你自己时,我希望你这样做。

如果我理解正确,PHP 正在神奇的 WSL-land 中执行命令,因此它需要与 WSL-land 相关的数据库 IP。

从命令提示符(Windows,而不是在WSL中(我跑ipconfig找到我的IPv4并将其放在我的Laravel DB_HOST。现在,当我在 WSL 中迁移时,它可以工作。

我意识到这过于冗长,但我个人对所有虚拟机的东西都感到非常困惑,所以我提出了我希望几周前找到的答案。

希望我永远不会回到Windows。

与其说

是对解决方案的修复,不如说是另一种解决方法,但也有可能(并且更快(使用 SQLite 作为数据库而不是 MySQL,只需在 phpunit.xml 中取消注释以下行:

<server name="DB_CONNECTION" value="sqlite"/>
<server name="DB_DATABASE" value=":memory:"/>