【问题标题】:Laravel 6.4.1 SQLSTATE[HY000] [2002] Connection refusedLaravel 6.4.1 SQLSTATE[HY000] [2002] 连接被拒绝
【发布时间】:2020-02-27 17:19:16
【问题描述】:

我是 Laravel 开发的新手。 我已在我的 Mac Mojave 10.14.6 上将 Xampp 更新到 7.3.11。 在 Laravel 项目中,当我点击 php artisan migrate 命令时出现以下错误。

SQLSTATE[HY000] [2002] 连接被拒绝(SQL: select * from information_schema.tables 其中 table_schema = laravel 和 table_name = 迁移和 table_type = 'BASE TABLE')

当我启动 Xampp 服务时,我的管理面板在 http://127.0.0.1:8080/phpmyadmin 上运行。 我在 Laravel 的工作项目也没有连接数据库,说连接被拒绝。 我尝试在 .env 文件中更改 DB_Port 和 DB_Host。 我尝试清除缓存。

任何帮助将不胜感激。

我的.env 文件

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

【问题讨论】:

  • 另外,我强烈建议使用 Laravel Valet 和通过 Homebrew 安装的 Nginx 和 MySQL,而不是这样的混乱
  • 你的 MySQL 服务器是否在 3306 端口上运行?
  • @kerbholz 是的,它在同一个端口上
  • 我已经通过将 Xampp 降级到 7.1.33 解决了这个问题。
  • 我重新启动了我的电脑并迁移到工作中!

标签: php laravel macos xampp macos-mojave


【解决方案1】:

打开localhost/phpmyadmin 并找到一个名为User accounts 的标签。

找到root 用户并在您的.env 中设置其密码,如果数据库不存在,请不要忘记创建名为laravel 的数据库

然后你可以清除配置缓存

php artisan config:clear

然后迁移

php artisan migrate

【讨论】:

  • 这对我没有帮助。但是,尽管核心 php 数据库已连接。
【解决方案2】:

我也遇到了这个错误,通过在 docker-compose 中运行 Laravel 构建一个新项目进行开发。

我的解决方案是将预构建的 .env 文件与我用于构建数据库容器的实际凭据进行比较。 特别是我使用 DB_HOST=127.0.0.1 而不是我的 docker-compose 设置的正确服务名称:DB_HOST=mysql

【讨论】:

  • 这对我有用,但我也必须运行php artisan config:clear
【解决方案3】:

我遵循并解决的只是简单的步骤

打开 .env 文件

将 DB_HOST = 127.0.0.1 更改为 localhost

完成

【讨论】:

  • 在更高版本的 laravel >7 中,DB_HOST 不接受使用本地 IP 地址(127.0.0.1),而是使用 URL:localhost。我不知道为什么,但使用 localhost 而不是 127.0.0.1 可以工作
【解决方案4】:

我遇到了同样的问题,当我应用以下操作时,问题就解决了。

    php artisan key:generate
    php artisan cache:clear
    php artisan route:clear
    php artisan config:clear 
    php artisan view:clear 

【讨论】:

  • 只有代码的答案几乎总是可以通过添加一些解释来改进。像这样的长篇大论很棒,但它并没有解释为什么应该采取每一步,或者你认为每一步会产生什么好处。答案的目标应该是教育读者并提供可行的解决方案。
【解决方案5】:

我有同样的问题。只需重新启动本地主机服务器即可解决,即 Xampp

【讨论】:

    【解决方案6】:

    试试看

    php 工匠配置:缓存

    然后在您的 .env 文件中指定您的数据库和端口

    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE= YOUR_DATABASE_NAME
    DB_USERNAME=root
    DB_PASSWORD=
    

    然后运行你的mysql服务器并运行

    php 工匠迁移

    注意:确保您的 Xammp 服务器完全正常并且已经启动了 mysql(使用 apache 服务器或您正在使用的任何服务器),并确保您在运行 php artisan migrate 之前已经创建了数据库 希望它适用于你

    【讨论】:

      【解决方案7】:

      在大多数情况下,这是端口配置的问题。您需要检查您的服务器在哪个端口上运行。然后您必须编辑项目的 .env 文件。例如,如果您使用 mamp,则应将端口更改为 8889,而不是 laravel 的默认 3606。这同样适用于 laravel 8。

      【讨论】:

        【解决方案8】:

        我遇到了这个问题,我将 MAMP 用于 MYSQL 服务器。 这是一个配置问题,我通过将端口更改为我在 MAMP 指令中找到的正确端口来解决,即8889。 所以我.env文件中的正确配置是:

        DB_CONNECTION=mysql
        DB_HOST=127.0.0.1
        DB_PORT=8889
        DB_DATABASE=dbname
        DB_USERNAME=root
        DB_PASSWORD=rootpassword
        

        【讨论】:

          【解决方案9】:

          我在 docker 容器 (MacOs) 中运行 laravel 和 mysql 时遇到了同样的问题。
          我发现问题出在 .env 文件中。

          .env 中的默认配置是:

          DB_CONNECTION=mysql
          DB_HOST=127.0.0.1
          DB_PORT=3306
          DB_DATABASE=my_db_name
          DB_USERNAME=sail
          DB_PASSWORD=password
          

          一些答案​​建议将 DB_HOST 更改为:

          DB_HOST = localhost
          

          但这对我不起作用...

          经过一番研究,我发现,在 docker 中运行 laravel 时,DB_HOST 也需要在 docker 中运行的数据库服务,在我们的例子中,该服务是 mysql。


          所以我不得不把 .env 改成这样:

          DB_CONNECTION=mysql
          DB_HOST=mysql
          DB_PORT=3306
          DB_DATABASE=my_db_name
          DB_USERNAME=sail
          DB_PASSWORD=password
          

          我还更改了 config/database.php 中的 DB_HOST

          'mysql' => [
                      'driver' => 'mysql',
                      'url' => env('DATABASE_URL'),
                      'host' => env('DB_HOST', 'mysql'),
                      'port' => env('DB_PORT', '3306'),
                      'database' => env('DB_DATABASE', 'my_db_name'),
                      'username' => env('DB_USERNAME', 'sail'),
                      'password' => env('DB_PASSWORD', 'password'),
                      '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'),
                      ]) : [],
                  ],
          

          直到那时,一切才开始正常工作。

          【讨论】:

            【解决方案10】:

            在 .env 中试试这个 conf(我使用的是 Laravel v7.0),它对我有用:

            DB_CONNECTION=mysql
            DB_HOST=mysql
            DB_PORT=3306
            DB_DATABASE=laravel
            DB_USERNAME=root
            DB_PASSWORD=root
            

            【讨论】:

              【解决方案11】:

              该死,我觉得自己很愚蠢,哈哈。 这就是在挠头几个小时后帮助我的原因。 检查您的 MySQL 正在哪个端口上运行,这就是您在 .env 文件中使用的端口。

              DB_CONNECTION=mysql
              DB_HOST=127.0.0.1
              DB_PORT=8889
              DB_DATABASE=laravel
              DB_USERNAME=yourusername
              DB_PASSWORD=yourpassword
              

              确保在创建用户时授予用户所有权限。如果您仍然感到困惑,请询问我,我会抽空帮助您。祝大家编码愉快!

              【讨论】:

                【解决方案12】:

                我正在使用 docker compose 文件。你需要做的就是暴露mysql的端口

                db:
                  image: mysql
                  command: --default-authentication-plugin=mysql_native_password
                  restart: always
                  environment:
                    MYSQL_ROOT_PASSWORD: example
                    MYSQL_DATABASE: example
                    MYSQL_USER: example
                    MYSQL_PASSWORD: example
                  ports:
                    - 3306:3306
                adminer:
                  image: adminer
                  restart: always
                  ports:
                    - 8080:8080

                【讨论】:

                  【解决方案13】:

                  在我的情况下实际上是这样的。

                  DB_HOST=127.0.0.1
                  DB_PORT=33060
                  

                  之前

                  DB_HOST=127.0.0.1
                  DB_PORT=3306
                  

                  许多解决方案建议将DB_HOST 更改为“localhost”。就我而言,这只是DB_PORT 中的一小部分0。

                  【讨论】:

                    猜你喜欢
                    • 2017-05-04
                    • 2017-09-20
                    • 2020-03-26
                    • 2020-12-04
                    • 2016-11-03
                    • 1970-01-01
                    • 2021-07-10
                    • 2021-12-17
                    • 2019-08-21
                    相关资源
                    最近更新 更多