Connexion MySQL ne fonctionne pas: 2002 Aucun fichier ou répertoire
Je suis en train de configurer WordPress. J'ai Apache et MySQL en cours d'exécution, et les comptes de base de données et sont tous mis en place. J'ai essayé de faire une simple connexion:
<?php
$conn = mysql_connect('localhost', 'USER', 'PASSWORD');
if(!$conn) {
echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
}
?>
Et j'ai toujours ceci:
Erreur: 2002 - Aucun fichier ou
annuaire
Ce fichier ou d'un répertoire pourrait-il en parler?
Je suis sur un OS X Snow Leopard, à l'aide de l'Apache. J'ai installé MySQL à l'aide de la x86_64 dmg.
Mise à JOUR: j'ai trouvé que le support est à /tmp/mysql.chaussette, donc En php.ini, j'ai remplacé toutes les occurrences du chemin d'accès incorrect avec qui.
- veuillez coller la sortie de
/etc/init.d/mysql start
si vous êtes sur une base debian distribution. en cas d'échec, vérifiez/etc/my.cnf
fichier pour le bon socket mysql chemin d'accès au fichier. - résolu le même problème sur OS X avec XAMPP à l'aide de "127.0.0.1" à la place de "localhost".
- Connexes: j'ai `PDOException: SQLSTATE(2002) No such file or directory
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez Linux: le chemin d'accès à la base de données mysql.chaussette de fichier est incorrect. C'est généralement parce que vous utilisez (LAMPP) XAMPP et il n'est pas dans /tmp/mysql.chaussette
Ouvrir le php.fichier ini et trouvez cette ligne:
Et de le rendre
localhost
de travail et le protocole TCP/IP est active afin de la modifier à l'adresse TCP/IP127.0.0.1
fonctionne.J'ai eu un problème similaire et a été en mesure de le résoudre en s'attaquant mon mysql avec
127.0.0.1
au lieu delocalhost
.Cela signifie probablement que j'ai quelque chose de mal dans mes hôtes de l'installation, mais cette solution rapide get me va pour l'instant.
code
127.0.0.1 localhostcode
. Ce qui me rend curieux de savoir pourquoi la connexion via localhost ne fonctionne pas. Si quelqu'un pouvait m'éclairer, je serais heureux.localhost
de travail et le protocole TCP/IP est active afin de la modifier à l'adresse TCP/IP127.0.0.1
fonctionne.C'est pour Mac OS X avec le natif d'installation d'Apache HTTP et personnalisée de l'installation de MySQL.
La réponse est basée sur @alec-gorge est une excellente réponse, mais depuis que j'ai eu à google certains changements spécifiques pour l'avoir configuré dans ma configuration, surtout Mac OS X-spécifique, je pensais que je voudrais ajouter ici par souci d'exhaustivité.
Activer le support de PHP5 pour Apache HTTP
Assurez-vous que le support de PHP5 est activé dans
/etc/apache2/httpd.conf
.Modifier le fichier avec
sudo vi /etc/apache2/httpd.conf
(entrez le mot de passe lors de la demande) et décommenter (enlever;
depuis le début de) la ligne de charge de la php5_module module.Démarrer HTTP Apache avec
sudo apachectl start
(ourestart
si c'est déjà commencé et doit être redémarré pour re-lire le fichier de configuration).Assurez-vous que
/var/log/apache2/error_log
contient une ligne qui vous indique le php5_module est activé, vous devriez voirPHP/5.3.15
(ou similaire).Recherche de Socket nom du fichier
Lorsque MySQL est en place et en cours d'exécution (avec
./bin/mysqld_safe
) il devrait y avoir de débogage de lignes imprimées sur la console que vous dire où vous pouvez trouver les fichiers journaux. Remarque le nom d'hôte dans le fichier nom -localhost
dans mon cas - qui peut être différent pour votre configuration.Le fichier qui vient après
Logging to
est important. C'est là que MySQL enregistre son travail.Ouvrir le
localhost.err
fichier (encore une fois, la vôtre peut être nommé différemment), c'est à diretail -1 /Users/jacek/apps/mysql/data/localhost.err
pour trouver le fichier de socket du nom -, il devrait être la dernière ligne.Note le
socket:
- c'est le fichier de socket à utiliser dansphp.ini
.Il y a une autre façon (certains disent un moyen plus facile) pour déterminer l'emplacement du support de nom de fichier par connexion à MySQL et en cours d'exécution:
Configuration de PHP5 avec le support MySQL - /etc/php.ini
Parlant de php.ini...
Dans
/etc
répertoire il y a /etc/php.ini.par défaut fichier. Copiez /etc/php.ini.Ouvrir
/etc/php.ini
et de regarder pour mysql.default_socket.La valeur par défaut de
mysql.default_socket
est/var/mysql/mysql.sock
. Vous devez modifier la valeur que vous avez noté auparavant, il a été/tmp/mysql.sock
dans mon cas.Remplacer le
/etc/php.ini
fichier pour prendre en compte le socket nom du fichier:Vérification finale
Redémarrer Apache HTTP.
Vérifier les logs si il n'y a pas d'erreur liées à PHP5. Pas d'erreur signifie que vous avez terminé et PHP5 avec MySQL devrait fonctionner correctement. Bravo!
mysql_connect
, qui est la réel problème de la question d'origine et pas un générique idée fausse de l'installation du logiciel.localhost
. Personne à la recherche pour obtenir de l'aide sur la configuration de xamp sur macos obtiendrez ici par googler. J'ai donc utilisé le terme de 'merde'. Ce fil n'a rien à voir avec macos mais avec mysql uniquement (même pas de php).Remplacer "localhost' à '127.0.0.1' dans le fichier de configuration (connexion db) aidé!
Abord, assurez-vous de MySQL est en cours d'exécution. Commande: mysqld start
Si vous ne pouvez toujours pas vous connecter, puis:
Quel est votre /etc/my.cnf ressembler?
Les 2 autres postes sont exacts et que vous devez vérifier votre prise parce que 2002 est une erreur de socket.
Un tutoriel sur la configuration de la LAMPE est: http://library.linode.com/lamp-guides/centos-5.3/index-print
/usr/local/mysql/mysql-test/include/default_my.cnf
, devrais-je copier mon.cnf de/etc
?J'aimerais vérifier votre php.fichier ini et de vérifier la base de données mysql.default_socket est réglé correctement et vérifiez également que votre mysqld est correctement configuré avec un fichier de socket, il peut accéder. Par défaut est "/tmp/mysql.chaussette".
/var/mysql/mysql.sock
, mais ce chemin n'existe pas.Pas qu'il vous aide beaucoup, mais dans le les versions récentes (et même moins récents) de MySQL, le code d'erreur 2002 signifie “can't connect to local MySQL server through socket [nom-de-socket]”, ce qui pourrait vous en dire un peu plus.
J'ai rencontré ce problème aussi, puis j'ai modifié 'localhost' à '127.0.0.1',il fonctionne.
dans mon cas, j'ai un problème avec mysqli_connect.
lorsque je veux me connecter
mysqli_connect('localhost', 'myuser','mypassword')
mysqli_connect_error() m'a fait cette erreur "No such file or directory"
cela a fonctionné pour moi
mysqli_connect('localhost:3306', 'myuser','mypassword')
Expansion sur Matthias D réponse ici j'ai été en mesure de résoudre ce 2002 erreur sur MySQL et MariaDB avec les chemins à l'aide de ces commandes:
De la première à obtenir le chemin d'accès réel à la base de socket:
Puis obtenir le PHP chemin:
À l'aide de la de sortie de ces deux commandes, de les relier:
Si qui retourne
No such file or directory
il vous suffit de créer le chemin d'accès au PHP mysql.chaussette, par exemple, si votre chemin est/var/mysql/mysql.sock
vous devez exécuter:Puis essayez de la sudo ln commande de nouveau.
De redémarrer le serveur mysql peut aider. Dans mon cas, le fait de redémarrer le serveur a sauvé beaucoup de temps.
P. S. - utilisation
sudo service mysql restart
pour les utilisateurs non-root.L'erreur de 2002 signifie que MySQL ne peut pas se connecter à la base de données locale au serveur via le fichier de socket (par exemple
/tmp/mysql.sock
).Pour savoir où se trouve votre fichier de socket unix, exécutez:
ensuite, vérifiez que votre application utilise le bon fichier de socket Unix ou se connecter via le port TCP/IP à la place.
Puis vérifiez si votre PHP a le droit de MySQL socket set-up:
et assurez-vous que fichier existe.
Test de la douille:
Si la socket Unix est mal ou n'existe pas, vous pouvez lien symbolique, par exemple:
ou de corriger votre fichier de configuration (par exemple,
php.ini
).Pour tester la AOP de connexion directement à partir de PHP, vous pouvez exécuter:
Vérifier également la configuration entre Apache et CLI (interface de ligne de commande), la configuration peut être différente.
Voir: Dépannage des Problèmes de Connexion à MySQL
Autres utils/commandes qui peuvent aider à trouver le problème:
mysql --socket=$(php -r 'echo ini_get("mysql.default_socket");')
netstat -ln | grep mysql
php -r "phpinfo();" | grep mysql
php -i | grep mysql
xdebug.show_exception_trace=1
dans votrexdebug.ini
sudo dtruss -fn mysqld
, sur Linux debug avecstrace
stat $(mysql_config --socket)
et si vous avez suffisamment d'espace libre (df -h
).net.de base.somaxconn
.Assurez-vous que votre serveur local (MAMP, XAMPP, WAMP, etc..) est en cours d'exécution.
J'ai eu un problème similaire.
Fondamentalement, ici, le problème est qu'il y a probablement deux instances de mysql en cours d'exécution.
A) l'exécution de /etc/init.d
B) la Lampe être installé dans /opt/lampe
Solution :
Étape 1 : Trouver tous les mysql instances en cours d'exécution à l'aide de commnad "rechercher /| grep mysqld"
Étape 2 :- l'Arrêt des services en cours d'exécution dans /etc/init.d à l'aide d'arrêter le service mysql
Étape 3 :- Redémarrez votre Lampe de services à l'aide de /opt/lampe/lampe de redémarrer
Vous devriez être bon d'aller 🙂
Sur un Mac, avant de faire tout le travail dur, il suffit de vérifier vos paramètres dans
System Preferences > MySQL
. Plus souvent que pas, j'ai connu l'équipe de courir dans ce problème depuisThe MySQL Server Instance is stopped
.Cliquez sur le
Start MySQL Server
bouton, et la magie qui va se passer.Im à l'aide de PHP-FPM ou plusieurs version de php dans mon serveur. Sur mon cas, j'ai la mise à jour mysqli de valeur, car il n'y a pas de mysql par défaut paramètre socket :
à :
grâce à @Alec Gorge
J'ai eu le même problème. Mon socket a finalement été trouvé dans /tmp/mysql.la chaussette. Puis j'ai ajouté que le chemin d'accès à php.ini. J'ai trouvé le support il y a de la vérification de la page "Serveur" dans MySQL Workbench. Si votre prise n'est pas dans /tmp/mysql.chaussette alors peut-être que MySQL Workbench pourrais vous dire où il est? (Vous a autorisé à utiliser MySQL Workbench...)
J'ai installé MySQL à l'aide de l'installateur. En fait, il n'y a pas de répertoire de données côtés répertoire 'bin'.
Donc, je créé manuellement les "données" du dossier "C:\Program Files\MySQL\MySQL Server 8.0". Et cela a fonctionné (changer le mot de passe root en suivant les étapes proposées sur https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/en/resetting-permissions-windows.html.