Accès refusé pour l'utilisateur 'homestead' @ 'localhost' (en utilisant le mot de passe: OUI)


165

Je suis sur un Mac OS Yosemite utilisant Laravel 5.0.

Dans mon environnement local , je cours, php artisan migrateje reçois:

Accès refusé pour l'utilisateur 'homestead' @ 'localhost' (en utilisant le mot de passe: OUI)

Configuration

Voici mon .env

APP_ENV=local
APP_DEBUG=true
APP_KEY=*****

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

app \ config \ database.php

   'mysql'       => [
    'driver'      => 'mysql',
    'host'        => env('DB_HOST', 'localhost'),
    'database'    => env('DB_DATABASE', 'homestead'),
    'username'    => env('DB_USERNAME', 'homestead'),
    'password'    => env('DB_PASSWORD', 'secret'),
    'unix_socket' => '/tmp/mysql.sock',
    'charset'     => 'utf8',
    'collation'   => 'utf8_unicode_ci',
    'prefix'      => '',
    'strict'      => false,
    ]

Comment éviter ce genre d'erreur?

J'ai essayé :


1

dans app / database.php

Remplacer localhostpar127.0.0.1

'host'=> env('DB_HOST', 'localhost') ->'host' => env('DB_HOST', '127.0.0.1')

Aussi, en .env

DB_HOST=localhost -> DB_HOST=127.0.0.1


2

Essayez de spécifier l'environnement

php artisan migrate --env=local


3

Vérifiez si MySQL fonctionne en exécutant

mysqladmin -u homestead -p status Enter password: secret

j'ai eu

Uptime: 21281 Threads: 3 Questions: 274 Slow queries: 0 Opens: 327 Flush tables: 1 Open tables: 80 Queries per second avg: 0.012

Ce qui veut dire que ça marche.


4

Vérifiez MySQL UNIX Socket ( cette étape fonctionne pour moi )


1
La meilleure pratique serait de s'assurer que le compte existe réellement dans mysql ... "J'ai trouvé cette clé dans la rue et elle ne fonctionne pas dans la serrure de ma porte d'entrée. Comment puis-je changer la serrure pour que la clé fonctionne?"
Marc B

1
Je suppose que vous utilisez la VM homestead? J'ai constaté que cela ne fonctionnera que lorsque vous êtes dans la VM. vous pouvez y accéder via ssh vagrant@127.0.0.1 -p 2222. ma machine par défaut ne broche pas qui dit que db est en cours d'exécution.
Jay Edwards

Réponses:


254

La raison de l'accès refusé pour l'erreur laravel 5 de l'utilisateur 'homestead' @ 'localhost' est le problème de mise en cache du fichier .env.php car Laravel 5 utilise la configuration basée sur l'environnement dans votre fichier .env.

1 . Accédez au répertoire racine de votre application et ouvrez le fichier .env (dans ubuntu peut-être il est caché, appuyez sur ctrl+ hpour afficher les fichiers cachés et si vous êtes dans le terminal, tapez: ls -apour afficher les fichiers cachés) dans votre éditeur et modifiez les paramètres de configuration de la base de données. puis enregistrez votre fichier .env

DB_HOST=localhost
DB_DATABASE=laravelu
DB_USERNAME=root
DB_PASSWORD=''

2 . puis redémarrez votre serveur apache / serveur Web. et actualisez votre page et vous avez fait

3 . Si le problème persiste, essayez d'exécuter la commande ci-dessous pour effacer l'ancien fichier de cache de configuration.

php artisan config:clear

Maintenant vous avez terminé l'erreur


1
J'ai travaillé pour moi merci, une question pourquoi nous devons définir nos détails de base de données sur le fichier .env comme nous le faisons sur le fichier database.php
Dipen

1
Peut-être avez-vous besoin de plusieurs environnements, production et local.
Abdou Tahiri

5
J'ai continué à essayer de redémarrer Apache alors que j'utilisais "php artisan serve" tout le temps, je vous suggère de ne pas faire la même erreur que moi> <
Carlton

1
Cela ne fonctionne pas, et maintenant je reçois PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'._.
Black

1
J'ai essayé de changer .envet de config:clear cache:cleartoutes les commandes, j'ai redémarré apachemais j'ai toujours le même problème.
Luzan Baral

67

TLDR: Vous devez arrêter le serveur Ctrl+ cet recommencer en utilisantphp artisan serve


Détails:

Si vous utilisez Laravel et que vous avez déjà démarré le serveur de développement local en php artisan serve

Et après avoir déjà exécuté le serveur ci-dessus, vous modifiez les éléments liés au serveur de base de données dans le fichier .env. Comme passer de MySQL à SQLite ou quelque chose comme ça. Vous devez vous assurer que vous arrêtez le processus ci-dessus, c'est Ctrcl C-à- dire tout ce qui arrête le processus. Et puis redémarrez Artisan Serve à nouveau, c'est-à-dire php artisan serveet actualisez votre navigateur et votre problème lié à la base de données sera corrigé. C'est ce qui a fonctionné pour moi pour Laravel 5.3


oh mon dieu cela a fonctionné pour moi merci. mais comment puis-je arrêter quand env a changé, y a-t-il des outils? c'est une bonne expérience
sabre tabatabaee yazdi

31

Deux façons de le résoudre

Première manière (non recommandé)

Ouvrez votre fichier de configuration de base de données (laravel_root / config / database.php) et recherchez le bloc de code ci-dessous.

        'host'      => env('DB_HOST', 'localhost'),
        'database'  => env('DB_DATABASE', 'blog'),
        'username'  => env('DB_USERNAME', 'root'),
        'password'  => env('DB_PASSWORD', ''),

Modifiez le bloc de code comme ci-dessous

        'host'      => 'yourHostName',
        'database'  => 'YourDatabastName',
        'username'  => 'YoutDatabaseUsername',
        'password'  => 'YourDatabasePassword',

Deuxième voie (recommandé par Laravel)

Vérifiez votre racine Laravel, il y a un fichier appelé .env s'il n'existe pas, recherchez .env.example, copiez / renommez-le en .env après que le fichier ait l'air génial!

APP_ENV=local
APP_DEBUG=true
APP_KEY=someRandomNumber

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null

Modifiez le bloc ci-dessous comme suit

DB_HOST=yourHostName
DB_DATABASE=yourDatabaseName
DB_USERNAME=yourDatabaseUsername
DB_PASSWORD=youPassword

Maintenant, cela fonctionnera bien.


1
Quel est l'intérêt de ce fichier? Cette information root/config/database.phpsemble redondante.
Halter

Les informations ne sont pas redondantes, elles utilisent la fonction env pour lire la valeur du fichier .env afin de sécuriser les informations du serveur.
absiddiqueLive le

Comment trouvez-vous ou créez-vous votre nom d'hôte, nom de base de données, nom d'utilisateur et mot de passe avec Homestead?
Connor Leech

21

si vous n'utilisez php artisan migratePAS de vagrant box mais de machine hôte, vous devez définir à l'intérieur de .envl'ip de la boîte192.168.10.10

et définissez évidemment l'autorisation de l'utilisateur à partir de votre ip quelque chose comme

grant all privileges on *.* to 'homestead'@% identified by 'secret';

dans le .envfichier

DB_HOST=192.168.10.10
DB_DATABASE=homestead
DB_USERNAME=homestead

Je n'ai pas pu faire fonctionner ça, mais grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';j'ai travaillé pour moi.
Ryan

21

Si vous utilisez le serveur Web par défaut de PHP (par exemple php artisan serve), vous devez redémarrer votre serveur après avoir modifié les valeurs de votre fichier .env.


11

Lorsque vous installez Homestead, cela crée une base de données "homestead" par défaut dans la VM. Vous devez SSH dans la machine virtuelle homestead sshet exécuter vos migrations à partir de là. Si vous travaillez localement sans VM, vous devrez créer votre base de données manuellement. Par défaut, la base de données doit être appelée homestead, le nom d'utilisateur est homestead et le mot de passe est secret.

consultez ce fil sur les laracasts ou ce billet de blog pour plus de détails


si vous obtenez

[PDOException] SQLSTATE[HY000] [2002] No such file or directory

essayez de changer "host" dans le fichier /app/config/database.php de "localhost" à "127.0.0.1". vous pouvez trouver plus de détails et d'autres correctifs ici sur ce fil .

Vérifiez également si vous avez spécifié le bon unix_socket. vérifiez ce fil .


@ rangerover.js essayez de changer "host" dans le fichier /app/config/database.php de "localhost" à "127.0.0.1"
Sojan V Jose

@ rangerover.js vérifiez ce thread stackoverflow.com/questions/20723803/… . voir n'importe laquelle des solutions compte.
Sojan V Jose

@ rangerover.js vérifie également si le service mysql est en cours d'exécution :)
Sojan V Jose

@ rangerover.js peut vérifier votre unix_socket? stackoverflow.com/a/25649930/939299
Sojan V Jose

1
Cela a finalement fonctionné le 4ème essayé. Veuillez supprimer tous vos commentaires et inclure ce lien stackoverflow.com/a/25649930/939299 dans votre réponse, car il m'aide.
cyber8200

11

Vérifiez MySQL UNIX Socket

Trouver l' emplacement unix_socket à l'aide de MySQL

mysql -u homestead -p

mysql> show variables like '%sock%';
+-----------------------------------------+-----------------------------+
| Variable_name                           | Value                       |
+-----------------------------------------+-----------------------------+
| performance_schema_max_socket_classes   | 10                          |
| performance_schema_max_socket_instances | 322                         |
| socket                                  | /var/run/mysqld/mysqld.sock |
+-----------------------------------------+-----------------------------+
3 rows in set (0.00 sec)

Ensuite, je vais sur config / database.php

Je mets à jour cette ligne: 'unix_socket' => '/tmp/mysql.sock',

à : 'unix_socket' => '/var/run/mysqld/mysqld.sock',

C'est tout. Cela fonctionne pour mon quatrième essai, j'espère que ces étapes aideront quelqu'un. :RÉ


Wow, cela m'a sauvé :)
Petar Vasilev

11

J'ai eu le même problème et à la fin il s'est avéré que je devais juste redémarrer le serveur et recommencer

Ctrl+ cpuis

php artisan serve

9

Sous Windows PC, suivez ci-dessous.


  1. Accédez au dossier racine de votre application.

  2. Modifier le fichier .env

Accédez au dossier racine de votre application

Modifier le fichier .env

Modifiez le surligné et modifiez le nom d'utilisateur et le mot de passe et le nom de la base de données en conséquence.


9

dans mon cas, après le redémarrage de mon serveur, le problème a disparu.

quitter / fermer la commande "php artisan serve" et

relancez la commande "php artisan serve" .


8

Dans le futur. Essayez d'abord d'effacer votre configuration

php artisan config:clear. 

Fermez toutes les fenêtres du terminal / cmd, puis redémarrez le terminal / CMD et cela devrait éliminer le message d'erreur. Voyez si ça marche.


merci beaucoup cela a fonctionné pour moi. je ne sais pas pourquoi cette erreur s'est produite. je viens de tout fermer et de recharger et d'exécuter php artisan config: clear
sabre tabatabaee yazdi

6

après config db redémarrez le:

 php artisan serve

Si le service est actif avant de définir db config.


5

J'utilise laravel 5. * Je suppose que j'ai un appel de fichier .envà la racine du projet qui ressemble à ceci:

APP_ENV=local
APP_DEBUG=true
APP_KEY=SomeRandomString

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null

Et c'était en écrivant la configuration bd afin que vous puissiez supprimer ces variables de configuration afin que laravel prenne la configuration sous / config ou configurez votre configuration ici.

J'ai fait la seconde et ça marche pour moi :)


5

Je l'ai! Connectez-vous en tant que root et accordez à homestead @ localhost les droits sur tout.

Depuis votre terminal:

$ homestead ssh

$ mysql -u root -p

Enter password: secret

mysql> grant all privileges on *.* to 'homestead'@'localhost' identified by 'secret';

Query OK, 0 rows affected (0.00 sec)
exit

Désormais, l'utilisateur régulier des homesteads a accès à toutes vos tables et, en tant que tel, devrait pouvoir exécuter des tâches telles que des migrations.


5

Après avoir changé .env avec la nouvelle configuration, vous devez arrêter le serveur et le relancer (php artisan serve). Cause laravel obtient l'environnement lors de l'initialisation du serveur. Si vous ne redémarrez pas, vous changerez le .env en vous demandant pourquoi les changements n'ont pas lieu !!


5

Tout ce que vous avez à faire est de modifier votre fichier .env .

DB_HOST=localhost
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

Devant DB_DATABASE, écrivez le nom de la base de données et devant DB_USERNAME, utilisez root .


4

Je voulais juste publier ceci parce que ce problème m'a frustré pendant environ 3 heures aujourd'hui. Je n'ai essayé aucune des méthodes énumérées dans les autres réponses, même si elles semblent toutes raisonnables. En fait, j'étais sur le point d'essayer de passer en revue chacune des solutions proposées ci-dessus, mais d'une manière ou d'une autre, j'ai eu ce coup d'inspiration. Voici ce qui a fonctionné pour moi pour me remettre au travail - YMMV:

1) Trouvez votre fichier .env. 2) Renommez votre fichier .env en autre chose. Laravel 5 doit utiliser ce fichier pour remplacer les paramètres ailleurs dans le framework. J'ai renommé le mien en .env.old 3) Vous devrez peut-être redémarrer votre serveur Web, mais je n'ai pas eu à le faire.

Bonne chance!


3

Vous devez exécuter la $ php artisan migratecommande depuis Homestead, pas depuis votre Mac.


Votre capture d'écran montre le nom de la machine sous la forme MBP-bheng-aveniors. Ce n'est pas votre VM. Vous devez SSH dans Homestead ( $ homestead ssh), puis exécuter à $ php artisan migratepartir de cette session SSH.
Martin Bean

3

Vérifiez votre fichier " .env " dans le dossier racine. est-ce correct?

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

3

j'ai trouvé une solution

  1. Accédez au répertoire racine de votre application et ouvrez le fichier .env (dans ubuntu, il se peut qu'il soit masqué, appuyez sur ctrl + h pour afficher les fichiers cachés) dans votre éditeur et modifiez les paramètres de configuration de la base de données. puis enregistrez votre fichier .env

  2. puis redémarrez votre serveur apache / serveur Web. et actualisez votre page et vous avez fait

  3. Si le problème persiste, essayez d'exécuter la commande ci-dessous pour effacer l'ancien fichier de cache de configuration.

Cela a fonctionné pour moi gl ...


3

modifiez simplement ces éléments dans le fichier .env de votre dossier racine.

DB_DATABASE=your_db_name
DB_USERNAME=your_db_user_name
DB_PASSWORD='your_db_password'

Cela a fonctionné pour moi.


3

dans mon cas (laravel 5+), j'ai dû mettre mon mot de passe entre guillemets simples et effacer le cache de configuration:

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=database_name
DB_USERNAME=user_name
DB_PASSWORD='password'

puis exécutez:

php artisan config:clear

1

Connectez-vous à MYSQL - utilisez la base de données mysql.

Sélectionnez * à partir de l'utilisateur;

Assurez-vous que votre colonne HOST est correcte. Il doit s'agir de l'hôte à partir duquel vous vous connectez (votre serveur d'applications), que ce soit l'adresse IP ou le nom DNS. De plus, «%» fonctionnera (ce qui signifie joker) mais ne sera pas sécurisé.


1

Vérifiez votre fichier .env, si vous avez modifié l'une des variables, veuillez redémarrer le serveur laravel et votre problème sera résolu


1

A. Après avoir mis à jour le fichier .env avec les paramètres de la base de données, effacez le paramètre larvaire en "exécutant php artisan config: clear"

B. Veuillez vous assurer de redémarrer votre serveur apache / réexécuter la commande "php artisan serve" pour que vos paramètres prennent effet.


0

J'ai eu le même problème en utilisant SQLite. Mon problème était que DB_DATABASE pointait vers le mauvais emplacement de fichier.

Créez le fichier sqlite avec la commande touch et affichez le chemin du fichier en utilisant php artisan tinker.

$ touch database/database.sqlite
$ php artisan tinker
Psy Shell v0.8.0 (PHP 5.6.27  cli) by Justin Hileman
>>> database_path(‘database.sqlite’)
=> "/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite"

Sortez ensuite ce chemin exact vers la variable DB_DATABASE.

DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=/Users/connorleech/Projects/laravel-5-rest-api/database/database.sqlite
DB_USERNAME=homestead
DB_PASSWORD=secret

Sans le chemin correct, vous obtiendrez l'erreur d'accès refusé


0

Si vous rencontrez une erreur, renvoyez quelque chose comme cela PDOException in Connector.php line 55: SQLSTATE[HY000] [1049] Unknown database 'laravelu'est dû au fait que vous modifiez la configuration de votre batabase en tant que DB_DATABASE=laravelu. Donc pour l'instant vous soit:

  1. Changer le ouDB_DATABASE=[yourdatabase]
  2. créer une base de données appelée laraveludans votre phpmyadmin

cela devrait pouvoir le résoudre


0

Dans mon cas, l'erreur a été "causée" par ma configuration Homestead / Vagrant dont j'ai oublié :) en essayant d'exécuter la migration uniquement à partir de la ligne de commande.

En cas d'utilisation de l'environnement Homestead Vagrant Box, vous devez exécuter votre migration depuis votre machine Homestead (après vous être connecté à l'aide de ssh :), vagrant@192.168.10.10:22les droits d'accès seront alors OK et permettront à la migration de s'exécuter.


0

D'après votre question, il semble que vous dirigez une ferme. Dans ce cas, assurez-vous d'exécuter les commandes dans votre VM. De nombreux développeurs, dont moi, font souvent des erreurs et exécutent des commandes artisanales en dehors de VM que les commandes essaieront de se connecter à notre base de données locale accessible via localhost qui est différente de la base de données utilisée par homestead. Cd dans votre répertoire Homestead et exécutez

vagrant ssh

puis cd dans le code si c'est là que vous gardez vos projets et cd dans votre projet et exécutez php artisan migrate again j'espère que cela aidera d'autres personnes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.