PDOException SQLSTATE[HY000] [2002] Aucun fichier ou répertoire
Je crois que j'ai déployé mon (très basique) site de fortrabbit, mais dès que je me connecte par SSH pour exécuter certaines commandes (telles que php artisan migrate
ou php artisan db:seed
), je reçois un message d'erreur:
[PDOException]
SQLSTATE[HY000] [2002] No such file or directory
À un certain point, la migration doit avoir travaillé, parce que mes tables sont là - mais cela n'explique pas pourquoi il ne fonctionne pas pour moi maintenant.
- Double Possible de PHP - MySQL connexion ne fonctionne pas: 2002 No such file or directory
- parfois, simplement parce que vous n'avez pas encore installé mysql
Vous devez vous connecter pour publier un commentaire.
Le message d'erreur indique qu'une connexion MySQL via socket est essayé (ce qui n'est pas pris en charge).
Dans le contexte de Laravel (artisan), vous voudrez probablement utiliser un autre /le bon environnement. Par exemple:
php artisan migrate --env=production
(ou quel que soit l'environnement). Voir ici.J'ai eu exactement le même problème. Aucune des deux solutions n'a fonctionné pour moi. J'ai résolu le problème en changeant le "host" dans le /app/config/database.php fichier de "localhost" à "127.0.0.1".
Ne sais pas pourquoi "localhost" ne fonctionne pas par défaut, mais j'ai trouvé cette réponse à une question similaire résolu dans une symfony2 post. https://stackoverflow.com/a/9251924/1231563
Mise à jour:
Certaines personnes ont demandé pourquoi ce correctif fonctionne donc, j'ai fait un peu de recherche sur le sujet. Il semble qu'ils utilisent différents types de connexion, comme expliqué dans ce post https://stackoverflow.com/a/9715164/1231563
La question qui se pose ici est que "localhost" utilise une socket UNIX et ne peut pas trouver la base de données dans le répertoire standard. Cependant, "127.0.0.1" utilise le protocole TCP (Transmission Control Protocol), ce qui signifie essentiellement qu'il s'exécute par le biais de la rubrique "internet" sur votre ordinateur est beaucoup plus fiable que le socket UNIX dans ce cas.
localhost
ne fonctionne pas et127.0.0.1
fait??port
pour le tableau de config.DB_HOST
dans le .env à127.0.0.1
au lieu delocalhost
.Homestead.yaml
fichier pour l'adresse ip correcte. Dans les versions les plus récentes de Homestead la valeur par défaut est192.168.10.10
, afin de l'utiliser127.0.0.1
résultat sera le même message d'erreur.127.0.0.1:8889
. Curieusement, l'adresse IP ne fonctionne PAS pour moi, lors de l'accès à mon application via un navigateur web, maislocalhost
n' -- et vice versa pour les CLI. :/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 eu le même problème et je suis sous Mac OS X 10.10 Yosemite. J'ai activé le Serveur Apache et de PHP qui est déjà fourni avec le système d'exploitation. Ensuite, j'ai juste configuré mCrypt bibliothèque pour commencer. Après cela, lorsque je travaillais avec des modèles de base de données et j'ai obtenu l'erreur:
La raison que j'ai trouvé est juste parce que PHP et MySQL ne peut pas se connecter eux-mêmes.
Pour obtenir ce problème résolu, j'ai suivi les étapes suivantes:
Ouvrir un terminal et se connecter à mysql avec:
Il vous demandera de passe. Ensuite, une fois que vous obtenez le mysql promt tapez la commande suivante:
Vous obtiendrez quelque chose comme ceci:
De conserver la valeur de la dernière ligne:
Dans votre
laravel
projet de dossier, recherchez le database.php de fichier, il vous permet de configurer les paramètres de connexion à la DB. Dans le mysql section ajouter la ligne suivante à la fin:Vous devez avoir quelque chose comme ceci:
Maintenant juste enregistrer les modifications, et de recharger la page et qu'il faut travailler!
/Applications/MAMP/tmp/mysql/mysql.sock
J'ai rencontré le
[PDOException] SQLSTATE[HY000] [2002] No such file or directory
d'erreur pour une raison différente. Je venais de terminer la construction d'une nouvelle marque de pile LAMP sur Ubuntu 12.04 avec Apache 2.4.7, PHP v5.5.10 et MySQL 5.6.16. J'ai déménagé mes sites en arrière sur et a tiré vers le haut. Mais, je n'arrivais pas à charger mon Laravel 4.2.x de site en raison de la[PDOException]
ci-dessus. Alors, j'ai vérifiéphp -i | grep pdo
et remarqué cette ligne:Mais, dans mon /etc/my.cnf la chaussette fichier est dans le
/var/run/mysqld/mysqld.sock
.Donc, j'ai ouvert mon php.ini et définir la valeur de
pdo_mysql.default_socket
:Ensuite, j'ai redémarré apache et vérifié
php -i | grep pdo
:Qu'il fixe pour moi.
La réponse de @stuyam résolu le "No such file or directory" problème pour moi
Mais ensuite j'ai eu une "Connexion refusée" erreur. Si quelqu'un a eu le même problème, ma solution a été de mettre à jour le app/config/local/database.php fichier de sorte que le port 8889:
'port' => '33060'
mais cette réponse m'a fait là!Si vous utilisez Laravel Homestead, assurez-vous que vous appelez les commandes sur le serveur.
Alors simplement le cd dans le bon répertoire, et le feu de votre commande.
source ~/.zshrc
2.homestead up --provision
3.homestead ssh
vagrant ssh
dans mon casDans mon cas, je n'ai eu aucun problème, tout juste oublié de démarrer le service mysql...
Mamp utilisateur d'activer l'option Autoriser l'accès réseau à MYSQL
Ajouter mysql.chaussette chemin dans database.php fichier comme ci-dessous un exemple
Exemple
C'est parce que PDO traite "localhost" hôte spécialement:
(à partir de http://php.net/manual/en/ref.pdo-mysql.connection.php)
Changer localhost 127.0.0.1 est "forcer" l'utilisation de TCP.
Remarque: mysqli_connect fonctionne bien avec localhost.
Bâtiment sur la réponse de @dcarrith ...
Au lieu de modifier les fichiers de config, j'ai créé un alias dans l'emplacement que PHP est à la recherche qui se connecte à la vraie mysql.la chaussette. (source)
Il suffit d'exécuter ces deux commandes (pas de redémarrage nécessaire):
Il a travaillé, après je change de
DB_HOST=localhost
àDB_HOST=127.0.0.1
au .fichier envÉtape 1
Trouver le chemin d'accès à votre unix_socket, pour le faire exécuter
netstat -ln | grep mysql
Vous devriez obtenir quelque chose comme ceci
Étape 2
Et l'ajouter dans votre unix_socket param
Espère que cela aide !!
Je suis en cours d'exécution sur MAMP Pro et ont eu ce genre de problème lorsque vous essayez de migrer (create db tables). Essayé un peu de ces suggestions aussi bien mais ne l'a pas fait pour moi.
Il suffit (après une heure de recherche sur google), j'ai ajouté deux choses à l' /config/database.php.
Fonctionne très bien maintenant!
Vérifiez votre port soigneusement . Dans mon cas, c'était 8889 et je suis en utilisant 8888.
le changement "DB_HOST" à partir de "localhost" à "127.0.0.1" et vice-versa
De Laravel 5 la base de données nom d'utilisateur et mot de passe dans la .env fichier existe dans le répertoire du projet, par exemple
Comme vous pouvez le voir, ces variables d'environnement sont impérieuses de la 'forge' cordes ici, donc leur modification n'a aucun effet:
Plus d'informations est ici https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables
J'ai rencontré ce problème lors de l'exécution de PHPUnit dans Élixir/Gulp, et Ferme que mon Vagabond de l'environnement.
Dans mon cas, j'ai édité .fichier de configuration de
DB_HOST=localhost
àDB_HOST=192.168.10.10
où192.168.10.10
est l'IP de mon Errance/Homestead hôte.Tentez de vous connecter à localhost:
Essayez de vous connecter à l'adresse 127.0.0.1:
OK, juste un commentaire /supprimer le paramètre suivant à partir de mon.cnf (sur OS X 10.5:
/opt/local/etc/mysqlxx/my.cnf
) pour obtenir:Bien sûr, d'arrêter et de démarrer le Serveur MySQL.
Si vous utilisez Laravel Homestead,
voici les paramètres de
(inclure le Vagabond-Virtual Machine)
.bash-profil
database.php
Terminal
Si quelqu'un cherche encore la réponse, il suffit de consulter votre .fichier env. Pour une raison que laravel créer un .env.fichier de l'exemple, donc toutes ces réponses n'a pas fonctionné pour moi. J'ai résolu mon problème renamming .env.exemple pour .env
Ce qui m'est arrivé parce que MySQL n'était pas en cours d'exécution. MySQL n'était pas pour commencer, car j'ai eu un manque
/usr/local/etc/my.cnf.d/
répertoire.Cela était requis par mon
/usr/local/etc/my.cnf
fichier de config comme un glob inclure (include /usr/local/etc/my.cnf.d/*.cnf
).De course
mkdir /usr/local/etc/my.cnf.d
, et ensuite, à partir de MySQL, fixe le problème.Dans mon cas, j'ai été en cours d'exécution php artisan migrer sur mon mac terminal, quand j'en avais besoin pour faire un ssh sur l'errance et l'exécuter à partir de là. Espérons que l'aide à quelqu'un le mal de tête.
J'ai eu ce problèmes lorsque j'ai été l'exécution de mon application en utilisant des conteneurs docker.
La solution a été de mettre le nom de la base de données MySQL conteneur de service j'ai été en utilisant dans
docker_compose.yml
sur DB_HOST. Dans mon cas, c'étaitdb
:Espère que cela aide.
Lors de l'utilisation d'un VirtualMachine assurez-vous de faire un ssh sur cette machine et naviguez jusqu'à votre dossier App et appeler le php artisan migrer commande à partir de là.
En mai cas, je serais tout simplement utilisé
au lieu de
pour ma forge des larves d'installation à l'aide de homestead. Je suis en supposant que cela signifiait que le site était de pouvoir être servis, mais le serveur MySQL n'est pas lancé. Lorsque j'ai utilisé la dernière commande pour lancer mon vagrant box, l'erreur a disparu.
Toutes ces réponses semblent comme de levage lourd...
Je viens de créer un
.env
fichier; édité monbootstrap/app.php
fichier, et décommenté la ligne suivante...Dotenv::load(__DIR__.'/../');
Espère que cela aide quelqu'un
Pour ceux qui cherchent à créer une nouvelle connexion db pas sur laravel mais tombé ici en cherchant des réponses à exécuter AOP depuis le Terminal. Ce serait vous aider. Et vous pouvez restructurer qu'il fonctionne le mieux pour vous.
espère que cela aide!
J'ai eu des problèmes similaires à accéder à mon site web avec Drupal. Je l'ai fixée par l'ouverture de la ligne de commande, et le redémarrage de mon serveur MySQL ou d'un service:
Cela devrait fonctionner. Si cela ne fonctionne pas, redémarrez votre serveur web local:
Qui devrait être suffisant. Espérons que cela fonctionne pour d'autres environnements. Notez que ces commandes nécessitent généralement des privilèges de super-utilisateur.