Je crois que j'ai réussi à déployer mon site (très basique) sur fortrabbit, mais dès que je me connecte à SSH pour exécuter certaines commandes (comme php artisan migrate
ou php artisan db:seed
), j'obtiens un message d'erreur:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
À un moment donné, la migration a dû fonctionner, car mes tables sont là - mais cela n'explique pas pourquoi cela ne fonctionne pas pour moi maintenant.
Réponses:
Le message d'erreur indique qu'une connexion MySQL via socket est tentée (ce qui n'est pas pris en charge).
Dans le cadre de Laravel (artisan), vous souhaiterez probablement utiliser un environnement différent / correct. Par exemple:
php artisan migrate --env=production
(ou n'importe quel environnement). Voyez ici .la source
J'ai eu exactement le même problème. Aucune des solutions ci-dessus n'a fonctionné pour moi. J'ai résolu le problème en modifiant "l'hôte" dans le fichier /app/config/database.php de "localhost" en "127.0.0.1".
Je ne sais pas pourquoi "localhost" ne fonctionne pas par défaut, mais j'ai trouvé cette réponse dans une question similaire résolue dans un message symfony2. https://stackoverflow.com/a/9251924/1231563
Mise à jour: Certaines personnes ont demandé pourquoi ce correctif fonctionne, j'ai donc fait un peu de recherche sur le sujet. Il semble qu'ils utilisent différents types de connexion comme expliqué dans cet article https://stackoverflow.com/a/9715164/1231563
Le problème qui se pose ici est que "localhost" utilise un socket UNIX et ne peut pas trouver la base de données dans le répertoire standard. Cependant, "127.0.0.1" utilise TCP (Transmission Control Protocol), ce qui signifie qu'il passe essentiellement par "Internet local" sur votre ordinateur, étant beaucoup plus fiable que la prise UNIX dans ce cas.
la source
localhost
ne fonctionne pas et127.0.0.1
fonctionne ??A Unix socket file is used if you do not specify a host name or if you specify the special host name localhost.
dev.mysql.com/doc/refman/5.7/en/can-not-connect-to-server.htmlJ'ai le même problème et j'utilise Mac OS X 10.10 Yosemite. J'ai activé le serveur Apache et PHP qui est déjà fourni avec le système d'exploitation. Ensuite, je viens de configurer la bibliothèque mCrypt pour commencer. Après cela, lorsque je travaillais avec des modèles et DB, j'ai eu l'erreur:
La raison pour laquelle j'ai trouvé est juste parce que PHP et MySQL ne peuvent pas se connecter eux-mêmes. Pour résoudre ce problème, je procède comme suit:
Ouvrez un terminal et connectez-vous à mysql avec:
Il vous demandera le mot de passe associé. Ensuite, une fois que vous obtenez l'invite mysql, tapez la commande suivante:
Vous obtiendrez quelque chose comme ceci:
Conservez la valeur de la dernière ligne:
Dans votre
laravel
dossier de projet, recherchez le fichier database.php où vous configurez les paramètres de connexion DB. Dans la section mysql , ajoutez la ligne suivante à la fin:Vous devez avoir quelque chose comme ça:
Maintenant, enregistrez simplement les modifications et rechargez la page et cela doit fonctionner!
la source
/Applications/MAMP/tmp/mysql/mysql.sock
J'ai rencontré l'
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
erreur pour une raison différente. Je venais de terminer la construction d'une toute nouvelle pile LAMP sur Ubuntu 12.04 avec Apache 2.4.7, PHP v5.5.10 et MySQL 5.6.16. J'ai déplacé mes sites et les ai mis à feu. Mais, je n'ai pas pu charger mon site basé sur Laravel 4.2.x à cause de ce qui[PDOException]
précède. J'ai donc vérifiéphp -i | grep pdo
et remarqué cette ligne:Mais, dans mon /etc/my.cnf, le fichier de chaussette est en fait
/var/run/mysqld/mysqld.sock
.J'ai donc ouvert mon php.ini et défini la valeur de
pdo_mysql.default_socket
:Ensuite, j'ai redémarré apache et vérifié
php -i | grep pdo
:Cela m'a arrangé.
la source
La réponse de @stuyam a résolu le problème "Aucun fichier ou répertoire de ce type" pour moi
Mais j'ai eu une erreur "Connexion refusée". Si quelqu'un avait le même problème, ma solution était de mettre à jour le fichier app / config / local / database.php pour que le port soit 8889:
la source
'port' => '33060'
mais cette réponse m'a fait arriver là!Si vous utilisez Laravel Homestead, assurez-vous d'appeler les commandes sur le serveur.
Ensuite, cd simplement dans le bon répertoire et lancez votre commande là-bas.
la source
source ~/.zshrc
2.homestead up --provision
3.homestead ssh
vagrant ssh
dans mon casDans mon cas, je n'ai eu aucun problème, j'ai juste oublié de démarrer le service mysql ...
la source
Option d'activation d'utilisateur Mamp Autoriser l'accès réseau à MYSQL
la source
Ajoutez le chemin mysql.sock dans le fichier database.php comme dans l'exemple ci-dessous
Exemple
la source
Il a travaillé après avoir changement de
DB_HOST=localhost
laDB_HOST=127.0.0.1
au fichier .envla source
localhost
cela ne fonctionne pas?En effet, PDO traite spécialement l'hôte "localhost":
(depuis http://php.net/manual/en/ref.pdo-mysql.connection.php )
Changer localhost en 127.0.0.1 "forcera" l'utilisation de TCP.
Remarque: mysqli_connect fonctionne bien avec localhost.
la source
S'appuyant sur la réponse de @dcarrith ...
Au lieu de modifier les fichiers de configuration, j'ai créé un alias à l'emplacement recherché par PHP qui se connecte au vrai mysql.sock. ( source )
Exécutez simplement ces deux commandes (aucun redémarrage nécessaire):
la source
Étape 1
Trouvez le chemin vers votre unix_socket, pour cela, lancez
netstat -ln | grep mysql
Vous devriez obtenir quelque chose comme ça
Étape 2
Prenez cela et ajoutez dans votre unix_socket param
J'espère que ça aide !!
la source
J'exécute sur MAMP Pro et j'ai eu ce problème similaire lors de la migration (créer des tables db). J'ai également essayé quelques-unes de ces suggestions, mais je ne l'ai pas fait pour moi.
Donc, simplement (après une heure de recherche sur Google), j'ai ajouté deux choses au fichier /config/database.php.
Fonctionne bien maintenant!
la source
Vérifiez soigneusement votre port. Dans mon cas, c'était 8889 et j'utilise 8888. changez "DB_HOST" de "localhost" en "127.0.0.1" et vice versa
la source
J'ai eu ces problèmes lorsque j'exécutais mon application à l'aide de conteneurs Docker.
La solution a été mise le nom du conteneur de service MySQL que j'utilisais dans
docker_compose.yml
DB_HOST. Dans mon cas, c'étaitdb
:J'espère que ça aide.
la source
Depuis Laravel 5, le nom d'utilisateur et le mot de passe de la base de données vont dans le fichier .env qui existe dans le répertoire du projet, par exemple
Comme vous pouvez le voir, ces variables d'environnement remplacent les chaînes de forge ici, donc les modifier n'a aucun effet:
Plus d'informations sont ici https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables
la source
J'ai rencontré ce problème lors de l'exécution de PHPUnit dans Elixir / Gulp et Homestead en tant que mon environnement Vagrant.
Dans mon cas , je modifié le fichier .env de
DB_HOST=localhost
àDB_HOST=192.168.10.10
où192.168.10.10
est l'adresse IP de mon hôte Vagrant / Homestead.la source
Essayez de vous connecter à localhost:
Essayez de vous connecter à 127.0.0.1:
OK, il suffit de commenter / supprimer le paramètre suivant de my.cnf (sous OS X 10.5:)
/opt/local/etc/mysqlxx/my.cnf
pour obtenir:Bien sûr, arrêtez et démarrez MySQL Server.
la source
J'ai eu des problèmes similaires pour accéder à mon site Web Drupal. Je l'ai corrigé en ouvrant la ligne de commande et en redémarrant mon serveur ou service MySQL:
Cela devrait fonctionner. Si ce n'est pas le cas, redémarrez votre serveur Web local:
Cela devrait suffire. J'espère que cela fonctionne aussi pour d'autres environnements. Notez que ces commandes nécessitent généralement des privilèges de superutilisateur.
la source
Si vous utilisez Laravel Homestead, voici les paramètres
(inclure Vagrant-Virtual Machine)
.bash-profile
database.php
Terminal
la source
Si quelqu'un cherche toujours la réponse, vérifiez simplement votre fichier .env. Pour une raison quelconque, laravel a créé un fichier .env.example, donc toutes ces réponses n'ont pas fonctionné pour moi. J'ai résolu mon problème en renommant .env.example en .env
la source
Cela m'est arrivé parce que MySQL ne fonctionnait pas. MySQL n'a pas pu démarrer car j'avais un
/usr/local/etc/my.cnf.d/
répertoire manquant .Cela était requis par mon
/usr/local/etc/my.cnf
fichier de configuration en tant que glob include (include /usr/local/etc/my.cnf.d/*.cnf
).L'exécution
mkdir /usr/local/etc/my.cnf.d
, puis le démarrage de MySQL, ont résolu le problème.la source
Dans mon cas, j'utilisais php artisan migrate sur mon terminal mac, quand j'avais besoin de ssh dans vagrant et de le lancer à partir de là. J'espère que cela aide quelqu'un au mal de tête.
la source
J'ai eu le même problème en utilisant Docker et le nom du service MySQL
db
dans le fichier docker_compose.yml:J'ai ajouté ce qui suit dans le
.env
fichier:vous devez également vous assurer que votre hôte est détectable à partir de l'application php.
C'est parce que PHP n'a pas trouvé l'hôte à utiliser pour se connecter.
la source
Lorsque vous utilisez un VirtualMachine, assurez-vous que ssh dans cette machine et accédez à votre dossier App et appelez la commande php artisan migrate à partir de là.
la source
Au cas où, j'aurais simplement utilisé
au lieu de
pour ma configuration de larves de forge en utilisant la propriété familiale. Je suppose que cela signifiait que le site était servi, mais le serveur MySQL n'a jamais été démarré. Lorsque j'ai utilisé cette dernière commande pour lancer ma boîte vagabonde, l'erreur a disparu.
la source
Toutes ces réponses semblent être lourdes ...
Je viens de créer un
.env
fichier; modifié monbootstrap/app.php
fichier et commenté la ligne suivante ...Dotenv::load(__DIR__.'/../');
J'espère que cela aide quelqu'un
la source
Pour toute personne essayant de créer une nouvelle connexion db non pas sur laravel mais bumped ici à la recherche de réponses pour exécuter PDO à partir du terminal. Ce serait utile pour vous. Et vous pouvez le refactoriser pour qu'il fonctionne le mieux pour vous.
J'espère que ça aide!
la source
Dans mon cas, j'ai dû supprimer le dossier bootstrap / cache et réessayer.
Mon cenario était après une migration de serveur.
la source