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

时间:2016-02-14 16:39:25

标签: php laravel-5 migration homestead artisan

在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错误 现在我完全迷失了......

30 个答案:

答案 0 :(得分:42)

我刚刚遇到此问题,发现将 .env 文件中的此项从127.0.0.1更改为localhost已将其修复。

DB_HOST=localhost

答案 1 :(得分:31)

<强>问题

在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文件。

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

答案 2 :(得分:21)

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

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

并在您的.env文件上添加

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

答案 3 :(得分:10)

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

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

php artisan config:clear

答案 4 :(得分:9)

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

php artisan config:cache

答案 5 :(得分:7)

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

答案 6 :(得分:5)

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

brew services start mysql

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

awersdfvsdvdcvd

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

答案 7 :(得分:4)

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

DB_HOST=localhost

答案 8 :(得分:3)

  • 问题已解决*

我遇到了同样的问题,仅通过将.env File FROM 127.0.0.1中的DB_HOST常量转换为localhost DB_HOST = localhost就解决了。

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

enter image description here

答案 9 :(得分:2)

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

答案 10 :(得分:2)

在我的情况下,此错误显示为蓝色。我盯着那个神秘的错误,我已经意识到,我试图在vm之外运行命令......

答案 11 :(得分:2)

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

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

例如,在我的情况下,我用 db 替换了 127.0.0.1,因为在我的 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 :(得分:2)

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

答案 13 :(得分:2)

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

答案 14 :(得分:1)

我遇到了同样的问题,但必须在 localhost 127.0.0.1 之间进行切换。

在浏览器中查看网站时,我需要访问使用的数据库。

localhost

但是当我需要在终端上进行任何迁移或播种时,我就需要使用

127.0.0.1

我当前正在使用无家可归虚拟盒子宅基地

最好不要在两者之间轻拂。

答案 15 :(得分:1)

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

答案 16 :(得分:1)

我,我正在使用无业游民,但我正在开箱即用地执行php artisan,因此基本上没有权限

答案 17 :(得分:0)

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

因此,实际上它是用于浏览器测试的端口 3306 ,而用于终端和Sequel Pro 33060 的端口。可以将它添加到Homestead.yaml中并在此处进行设置吗?

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

MySQL: 33060 →转至 3306

答案 18 :(得分:0)

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

因此,在更改了数据库并配置了:clear Tinker之后,

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

  

php工匠服务

答案 19 :(得分:0)

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

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

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

    sudo服务MySQL停止

答案 20 :(得分:0)

对我来说,将凭据括在引号中是可以解决问题的

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

答案 21 :(得分:0)

我遇到了

  

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

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

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

答案 22 :(得分:0)

$(document).ready(function() {
  validate();
  $('button[type="submit"]').on('click', function(e) {
    if (!validate()) {
      e.preventDefault();
    }
  });
});

function validate() {
  var val1 = $('#test').val();
  var val2 = $('#test2').val();
  var val3 = $('#test3').val();

  var valid =
    (val1 !== '' && val3 !== '' && val2 === '') ||
    (val1 === '' && val2 !== '' && val3 !== '');
    
  if (valid) {
    $('.alert.alert-error').hide();
  } else {
    $('.alert.alert-error').show();
  }
  return valid;
}

以上给出的是我的.env

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

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

答案 23 :(得分:0)

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

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

答案 25 :(得分:0)

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

答案 26 :(得分:0)

如果您像我一样使用Homestead,例如,在运行 artisan test 之前,别忘了将其插入。

答案 27 :(得分:0)

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

希望有所帮助。

答案 28 :(得分:0)

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

答案 29 :(得分:-1)

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