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

ncl*_*svh 39 php migration laravel-5 artisan homestead

使用Mac OS X和Homestead 2.2.1与Laravel 5.2.

在终端(在我的项目文件夹中的宅基地内)我可以做php工匠来查看所有可用的命令.当我尝试运行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
Run Code Online (Sandbox Code Playgroud)

我还尝试过DB_HOST的localhost和DB_USERNAME以及DB_PASSWORD的root.所有这些可能的变化放在一起!


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

Host       127.0.0.1
Username   homestead
Password   secret
Database   tcv
Port       33060
Run Code Online (Sandbox Code Playgroud)

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

据我所知,这是一个配置问题,因为我可以使用Sequel Pro连接它.但我老老实实地没有想到什么是错误的设置.

谢谢您的帮助 !!

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

小智 60

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

DB_HOST =本地主机

  • 仅供 MAMP 用户...在 MAMP 服务器上运行时,127.0.0.1 似乎可以工作,但在 MAMP PRO 服务器上,它需要是本地主机! (2认同)

ncl*_*svh 37

问题

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

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

    '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,
    ],
Run Code Online (Sandbox Code Playgroud)

请注意,没有设置端口!

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


FIX
只需添加'port' => env('DB_PORT', 3306),到您的config/database.php并在.env中设置该值DB_PORT=33060

  • 端口号存在然后同样的问题,我正在使用laravel 5 (5认同)
  • 这是我忘记的“.env”文件。谢谢你! (2认同)
  • DB_PORT = 33060,端口号末尾有额外的0 (2认同)

小智 24

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

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

并在你的.env文件中添加

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


Cha*_*.AY 22

如果您的后端和数据库在 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
    .
    .
    .
Run Code Online (Sandbox Code Playgroud)


小智 16

使用localhost而不是127.0.0.1(在.env文件中),然后运行命令"php artisan config:cache"

  • 这就是我解决该问题的方法。 (3认同)

Ash*_*arg 12

问题解决了

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

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

别忘了奔跑

php artisan config:clear


And*_*rei 10

对于有问题的其他人来说,另一种解决方案 我有所有设置正确但由于某种原因我的更改没有更新.Laravel实际上缓存了配置文件(我发现它完全是愚蠢的).

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

php artisan config:clear


Tom*_*aid 8

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


小智 7

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


Sou*_*Boy 5

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

mysqld
Run Code Online (Sandbox Code Playgroud)

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

brew services start mysql
Run Code Online (Sandbox Code Playgroud)

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


小智 5

有可能你mysql还没有启动或者还没到港口3306


Die*_*ezú 5

我有同样的问题,试试这个工作

DB_HOST=localhost
Run Code Online (Sandbox Code Playgroud)