web-dev-qa-db-fra.com

SQLSTATE [HY000] [2002] Connexion refusée dans le homestead de Laravel

Utilisation de Mac OS X et Homestead 2.2.1 avec Laravel 5.2.

En terminal (dans Homestead dans mon dossier de projet), je peux faire de l'art php pour voir toutes les commandes disponibles. Lorsque j'essaie d'exécuter php artisan migrate, une erreur de connexion survient:
SQLSTATE[HY000] [2002] Connection refused


J'ai configuré un projet Laravel avec ces .env settings 

DB_Host=127.0.0.1
DB_DATABASE=tcv
DB_USERNAME=Homestead
DB_PASSWORD=secret

J'ai également essayé localhost pour DB_Host et root pour DB_USERNAME et DB_PASSWORD. Et toutes les variations possibles de ceux-ci mis ensemble! 


Dans Sequel Pro (application de gestion de la base de données), je peux me connecter avec ces paramètres

Host       127.0.0.1
Username   Homestead
Password   secret
Database   tcv
Port       33060

Mais cette base de données est évidemment vide, car je ne peux pas y migrer depuis le terminal ...

Autant que je sache, il s’agit d’un problème de configuration, car je peux y accéder avec Sequel Pro. Mais honnêtement, je n'ai aucune idée effrayante de ce qui ne va pas.

Merci pour l'aide !!

MODIFIER
Pour une raison quelconque, la même erreur SQLSTATE[HY000] [2002] Connection refused apparaît lors du déplacement de mon projet vers MAMP et de l'exécution de la migration php artisan.
Maintenant je suis complètement perdu ... 

21
nclsvh

Problème

Dans Laravel, vous avez config/database.php où se trouve toute la configuration pour la connexion. Vous avez également un fichier .env dans le répertoire racine de votre projet (que tout le monde utilise pour gagner du temps). Cela contient des variables que vous pouvez utiliser pour l'ensemble du projet.

Sur un projet standard L5, la section MySql de config/database.php ressemble à ceci:

    '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,
    ],

Notez qu'il n'y a pas de port défini!

Bien que dans mon fichier .env j'avais défini DB_PORT=33060. Mais ce value (3306) n'a jamais été lu dans le config/database.php.
Donc, ne soyez pas un idiot comme moi et oubliez de vérifier le fichier database.php.


RÉPARER
Ajoutez simplement 'port' => env('DB_PORT', 3306), à votre config/database.php et définissez cette valeur dans .env comme ceci DB_PORT=33060

31
nclsvh

Je viens de rencontrer ceci et j'ai constaté que le fait de changer cela dans le fichier .env de 127.0.0.1 en localhost le corrigeait. 

DB_Host = localhost

34
Richard Hood

Si vous utilisez MAMP sur un Mac OS, ajoutez la ligne suivante à votre fichier de configuration de base de données mysql

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

et sur votre fichier .env ajouter

DB_SOCKET =/Applications/MAMP/tmp/mysql/mysql.sock
14
Albert A

Une autre solution pour quiconque a un problème. Tous les paramètres étaient corrects, mais pour une raison quelconque, mes modifications n’ont pas été mises à jour. Laravel met en cache le fichier de configuration (que je trouve complètement stupide).

Voici ma solution après la mise à jour des configs:

php artisan config:clear

8
xtrimsky

J'avais ce problème. Lors de la connexion à Sequel Pro, je dois utiliser 33060 en tant que port, mais dans le fichier .env, il doit s'agir de 3306. Le fichier .env contenait 33060. Changé à 3306 et cela a fonctionné. 

6
Tom Kincaid

Utilisez localhost au lieu de 127.0.0.1 (dans votre fichier .env), puis exécutez la commande "php artisan config: cache"

5
Lode Alaert

J'ai eu le même problème, essayez ça marche

DB_Host=localhost

Ceci est une solution simple. Votre base de données mysql a perdu sa connexion au serveur. Si vous utilisez un serveur local, lancez ceci dans votre terminal:

mysqld

Cela va reconnecter votre base de données. Ensuite, si vous utilisez homebrew, lancez:

brew services start mysql

Cela connectera automatiquement votre base de données lors de la connexion.

4
SouthernBoy

Dans mon cas, cette erreur est apparue en bleu. En regardant cette erreur mystérieuse, j'ai réalisé que j'essayais d'exécuter la commande en dehors de VM ...

2
bruddha

J'ai le même problème mais je dois changer entre le localhost et 127.0.0.1 .

Lors de la visualisation du site Web dans un navigateur, je dois accéder à la base de données que j'utilise.

localhost

Mais lorsque je dois effectuer des migrations ou des ensemencements dans le terminal, je dois les utiliser.

127.0.0.1

J'utilise actuellement un vagrant , virtual box et Homestead

Ce serait bien de ne pas avoir à continuer à feuilleter les deux.

1
Paul

Il est possible que votre 'mysql' n'ait pas démarré ou qu'il ne soit pas sur le port '3306'

1
gxet4n

J'ai eu un problème similaire et aucune suggestion placée ici ne m'a aidé ……. Dans mon cas, 127.0.0.1 fonctionne correctement.

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
0
LukaszTaraszka

Si vous utilisez Homestead, vous devriez l'exécuter avec le port mysql par défaut. Ainsi, au lieu d'utiliser DB_PORT=33060, vous devriez utiliser DB_PORT=3306 dans votre fichier .env. Pensez également à exécuter vos commandes php artisan migrate dans votre installation Homestead et tout devrait bien se passer.

J'espère que cela pourra aider.

0
Lamin Barrow

Ok mise à jour, il semble que l'hôte n'est pas le problème mais en fait le port.

C'est donc en fait le port 3306 pour les tests du navigateur et pourtant pour le terminal et Sequel Pro 33060 . Pourrait-il avoir quelque chose à voir avec l'ajout dans Homestead.yaml et le définir ici?

En lisant la configuration par rapport à Laravel, il est écrit:

MySQL: 33060 → Transférer à 3306

0
Paul

Moi, j'utilise vagabond, mais j'exécute en dehors de la boîte un artisan php, donc fondamentalement, il n'a pas la permission

0
Marlon Bernal

La seule chose qui a résolu le problème pour moi a été de mettre les détails de connexion dans config/database.php au lieu du fichier .env . J'espère que cela t'aides

0
Maxime Barber

Après avoir mis toute la configuration sur le fichier .env, si vous exécutez déjà php artisan serve, relancez-le.