【问题标题】:SQLSTATE[HY000] [2002] Connection refused within Laravel homesteadSQLSTATE [HY000] [2002] Laravel 宅基地内的连接被拒绝
【发布时间】:2016-05-25 11:16:21
【问题描述】:

在 Laravel 5.2 中使用 Mac OS X 和 Homestead 2.2.1。

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


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

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

我还为 DB_HOST 尝试了 localhost,为 DB_USERNAME 和 DB_PASSWORD 尝试了 root。并将这些的所有可能变化放在一起!


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

Host       127.0.0.1
Username   homestead
Password   secret
Database   tcv
Port       33060

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

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

感谢您的帮助!!

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

【问题讨论】:

  • 您是否尝试过将 ip 地址从 127.0.0.1 更改为 localhost?很久以前我也遇到过类似的问题,这对我有用(现在无法在 mac 上测试)
  • @Adam 是的,我有(就像我在原始问题中所说的那样),不会改变任何事情。但是感谢您的输入...
  • 我的错,没看到你已经试过了
  • 您的应用正在虚拟机上寻找数据库。我假设 Sequel Pro 能够访问,因为它在主机上。您必须使用您的实际计算机 IP 从 homestead 访问数据库
  • @chikurubhi 什么是正确的解决方法?让应用程序在本地查找数据库?我该怎么做?

标签: php laravel-5 migration homestead laravel-artisan


【解决方案1】:

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

DB_HOST=localhost

【讨论】:

  • 感谢理查德·胡德。它解决了我的问题。 Laravel 遇到这个问题真是太愚蠢了。
  • 哇!真的为我解决了这个问题!谢谢老兄! :)
  • FYI MAMP 用户...似乎在 MAMP 服务器上运行时 127.0.0.1 可以工作,但在 MAMP PRO 服务器上它需要是 localhost!
  • 我在使用 laradock.io (Laravel 8) 时收到了同样的错误消息。然后我需要设置我电脑的真实 IP 地址。我猜这是由于请求来自 PHP-fpm 容器内部。
  • 这解决了我在实时服务器、共享主机上的问题。我的网站运行良好,直到几周后它自行关闭,通过这样做,它修复了它,但我不知道这到底是如何工作的。
【解决方案2】:

问题

在 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), 添加到您的 config/database.php 并在 .env 中设置该值,如下所示 DB_PORT=3306

【讨论】:

  • 这是我忘记的 .env 文件。谢谢!
  • 端口号存在然后也是同样的问题,我使用的是 laravel 5
  • @151291 在我的脑海中:你在ssh吗?你有 .env 吗?
  • DB_PORT=33060,你的端口号末尾有多余的0
  • @MahmoudAliKassem 是的,帖子已被编辑。我没有足够的声誉来做点什么
【解决方案3】:

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

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

并在您的 .env 文件中添加

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

【讨论】:

  • 解决了我在 Catalina 上的问题。谢谢
  • 客户端在 MAMP 上进行测试 - 这节省了大量时间 - 谢谢!!!
  • 对我(Mac 和 MAMP)来说,只有这一行有效,但非常重要的是,添加该行后,您应该使用 php artisan optimizephp artisan config:cache 清除缓存
  • 解决了我的问题。
【解决方案4】:

使用localhost 代替127.0.0.1(在您的.env 文件中),然后运行命令:

php artisan config:cache

【讨论】:

  • 这是我的解决方案。旧密码仍在旧 .env 文件的缓存中。
  • 我在使用localhost 时得到“没有这样的文件或目录”。我正在尝试连接到通过 SSH 转发的远程 mysql 数据库。
  • 感谢您的命令:php artisan config:cache。它解决了我的问题。
【解决方案5】:

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

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

php artisan config:clear

【讨论】:

【解决方案6】:

问题已解决

我遇到了同样的问题,只需将 .env 文件中的 DB_HOST 常量从 127.0.0.1 转换为 localhost *JUST DO THIS AS GIVEN IN THE BELOW LINE* DB_HOST = localhost 即可解决。

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

别忘了跑

php artisan config:clear

【讨论】:

  • 我做了一个 PR 来在 Laravel 官方文档中添加一些解释,但他们决定忽略它。 link
  • 有时这行不通。所以你必须从这里删除一些文件。 /bootstrap/cache/packages.php /bootstrap/cache/services.php /bootstrap/cache/config.php 之后运行 php artisan config:clear
  • php artisan config:clear 用 nginx、laravel 8 和 php 8 解决了我在 azure 上的问题。
【解决方案7】:

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

【讨论】:

  • 谢谢,这对我有用。奇怪的是,我有另一个项目,我刚刚在这个项目之前运行,并且确实在 33060 上工作,而这个项目确实需要 3306
【解决方案8】:

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

mysqld

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

brew services start mysql

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

【讨论】:

  • 只是想让 SouthernBoy 知道这让我免于调试我犯的错误的漫长一天!
  • 我必须 brew install mysql 现在它正在工作,但我收到了不同的错误消息。
【解决方案9】:

我遇到了同样的问题,试试这个方法

DB_HOST=localhost

【讨论】:

    【解决方案10】:

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

    【讨论】:

    • 对于那些在 Docker/Laradock mysql 容器上运行代码的人来说,这是正确的解决方案。 DB_HOST 的值等于容器主机名(即 id),然后 Docker 会将其转换为正确的网络地址。
    【解决方案11】:

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

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

    以我为例,我将 127.0.0.1 替换为 db,因为在我的 docker-compose 文件中,我已将数据库的服务名称定义为 db

    我的 docker-compose 看起来像这样

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

    【讨论】:

    • 谢谢,它有效。
    【解决方案12】:

    有可能你的mysql没有启动或者不在3306端口

    【讨论】:

      【解决方案13】:

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

      【讨论】:

      • 在我的情况下尝试连接容器外部... :(
      【解决方案14】:

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

      【讨论】:

      • 这是我需要的简单修复。我将 DB_HOST 的 .env 文件从 127.0.0.1 更改为 localhost,清除了配置和缓存,但它仍然无法正常工作。通过此命令重新启动有效。谢谢!
      【解决方案15】:

      对我来说,将凭据用引号括起来就可以了

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

      【讨论】:

      • 也为我工作。谢谢!
      【解决方案16】:

      当 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 文件中获取值

      【讨论】:

        【解决方案17】:

        我,我正在使用 vagrant,但我在盒子外执行 php artisan 所以基本上它没有权限

        【讨论】:

        • 这是一个建设性的答案还是另一个问题?
        • 根据我的情况给出答案
        • 这个答案对我来说是正确的,我确实忘了先登录到 vagrant ssh ......从我的本地机器迁移肯定行不通......
        【解决方案18】:

        我可能是因为您可能很久没有重新启动 PHP artisan

        所以在进行数据库更改和配置后:clear Tinker 工作正常

        但是要让浏览器重新建立新的数据库连接,你需要重新运行

        php 工匠服务

        【讨论】:

          【解决方案19】:
          1. 从任务管理器中终止 sqld
          2. 从 xampp 控制面板停止 MySQL 并重新启动它

          如果还是同样的问题,从根目录运行

          php artisan cache:clear
          php artisan config:cache
          php artisan serve
          
          1. 如果仍然有问题,请检查您是否使用了多个 sql server 副本,例如通过 Ubuntu 应用程序,如果是,请在 ubuntu 中停止 MySQL 服务器

            sudo 服务 MySQL 停止

          【讨论】:

            【解决方案20】:
            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'),
                    ]) : [],
                ],
            

            上面给出的是我的 database.php 文件。我刚刚从 database.php 中注释掉了端口,它对我有用。

            【讨论】:

            • 您的评论帮助了我.. 非常感谢 :D
            【解决方案21】:

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

            希望对您有所帮助。

            【讨论】:

              【解决方案22】:

              为我解决这个问题的唯一方法是将连接详细信息放在 config/database.php 而不是 .env 文件中。希望这会有所帮助

              【讨论】:

                【解决方案23】:

                我遇到了类似的问题,这里没有任何建议对我有帮助。 这解决了我的问题是将应用程序名称和数据库主机名设置为相同的值。就我而言,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
                

                【讨论】:

                  【解决方案24】:

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

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

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

                  MySQL:33060 → 转发到 3306

                  【讨论】:

                    【解决方案25】:

                    我遇到了

                    SQLSTATE[HY000] [2002] 连接被拒绝(SQL: select * from 项目)

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

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

                    【讨论】:

                      【解决方案26】:

                      我发现我的服务器只需要重新启动,并且 “bam” 已修复。

                      【讨论】:

                        【解决方案27】:

                        如果你像我一样使用 Homestead,在运行 artisan test 之前不要忘记 ssh 进入它。

                        【讨论】:

                          【解决方案28】:

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

                          【讨论】:

                            【解决方案29】:

                            如果您有任何类型的 proxyvpn ,请将它们关闭并关闭。这是我的问题。

                            【讨论】:

                              【解决方案30】:

                              在 ubuntu/linux 上,您可以尝试使用以下命令重启 mysql:sudo service mysql restart

                              【讨论】:

                              • OP 在 MacOS 上。另外,为什么重启会解决这个问题?
                              猜你喜欢
                              • 2017-05-04
                              • 2017-09-20
                              • 2020-03-26
                              • 2020-12-04
                              • 2020-02-27
                              • 2016-11-03
                              • 1970-01-01
                              • 2019-07-18
                              • 2021-07-10
                              相关资源
                              最近更新 更多