web-dev-qa-db-fra.com

La connexion MySQL ne fonctionne pas: 2002 Aucun fichier ou répertoire de ce type

J'essaye d'installer WordPress. J'ai Apache et MySQL en cours d'exécution, et les comptes et la base de données sont tous configurés. J'ai essayé de faire une connexion simple:

<?php
    $conn = mysql_connect('localhost', 'USER', 'PASSWORD');
    if(!$conn) {
        echo 'Error: ' . mysql_errno() . ' - ' . mysql_error();
    }
?>

Et j'obtiens toujours ceci:

Erreur: 2002 - Aucun fichier de ce type ou annuaire

De quel fichier ou répertoire pourrait-il parler?

Je suis sous OS X Snow Leopard et utilise Apache intégré. J'ai installé MySQL en utilisant le dmg x86_64.

UPDATE: J'ai trouvé que le socket est à /tmp/mysql.sock, donc dans php.ini, j'ai remplacé toutes les occurrences du mauvais chemin par cela.

83
mk12

Si vous utilisez Linux: le chemin du fichier mysql.sock est incorrect. Cela est généralement dû au fait que vous utilisez (LAMPP) XAMPP et que ce n’est pas dans /tmp/mysql.sock

Ouvrez le fichier php.ini et trouvez cette ligne:

mysql.default_socket

Et fais le

mysql.default_socket = /path/to/mysql.sock
86
Alec Gorge

J'ai eu un problème similaire et j'ai pu le résoudre en adressant mon mysql avec 127.0.0.1 au lieu de localhost.

Cela signifie probablement que quelque chose ne va pas dans la configuration de mes hôtes, mais cette solution rapide me donne envie maintenant.

121
bryan kennedy

Ceci concerne Mac OS X avec l'installation native d'Apache HTTP et installation personnalisée de MySQL.

La réponse est basée sur l'excellente réponse de @ alec-gorge, mais comme je devais effectuer quelques modifications spécifiques afin de le configurer dans ma configuration, principalement pour Mac OS X, j'ai pensé l'ajouter ici par souci d'exhaustivité.

Activer le support PHP5 pour Apache HTTP

Assurez-vous que le support PHP5 est activé dans /etc/Apache2/httpd.conf.

Editez le fichier avec Sudo vi /etc/Apache2/httpd.conf (entrez le mot de passe lorsque vous y êtes invité) et décommentez (retirez ; du début de) la ligne pour charger le module php5_module.

LoadModule php5_module libexec/Apache2/libphp5.so

Démarrez Apache HTTP avec Sudo apachectl start (ou restart s'il est déjà démarré et doit être redémarré pour relire le fichier de configuration).

Assurez-vous que /var/log/Apache2/error_log contient une ligne vous indiquant que le php5_module est activé - vous devriez voir PHP/5.3.15 (ou similaire).

[notice] Apache/2.2.22 (Unix) DAV/2 PHP/5.3.15 with Suhosin-Patch configured -- resuming normal operations

Recherche du nom du fichier Socket

Lorsque MySQL est opérationnel (avec ./bin/mysqld_safe), des lignes de débogage doivent être imprimées sur la console pour vous indiquer où vous pouvez trouver les fichiers journaux. Notez le nom d'hôte dans le nom du fichier - 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 ses travaux.

130309 12:17:59 mysqld_safe Logging to '/Users/jacek/apps/mysql/data/localhost.err'.
130309 12:17:59 mysqld_safe Starting mysqld daemon with databases from /Users/jacek/apps/mysql/data

Ouvrez le fichier localhost.err (encore une fois, le vôtre pourrait être nommé différemment), c’est-à-dire tail -1 /Users/jacek/apps/mysql/data/localhost.err pour connaître le nom du fichier de socket. Ce devrait être la dernière ligne.

$ tail -1 /Users/jacek/apps/mysql/data/localhost.err
Version: '5.5.27'  socket: '/tmp/mysql.sock'  port: 3306  MySQL Community Server (GPL)

Notez la partie socket: - c'est le fichier de socket que vous devez utiliser dans php.ini.

Il existe un autre moyen (certains disent un moyen plus simple) de déterminer l'emplacement du nom de fichier du socket en vous connectant à MySQL et en exécutant:

show variables like '%socket%';

Configuration de PHP5 avec le support MySQL - /etc/php.ini

En parlant de php.ini ...

Dans le répertoire /etc se trouve le fichier /etc/php.ini.default. Copiez-le dans /etc/php.ini.

Sudo cp /etc/php.ini.default /etc/php.ini

Ouvrez /etc/php.ini et recherchez mysql.default_socket.

Sudo vi /etc/php.ini

La valeur par défaut de mysql.default_socket est /var/mysql/mysql.sock. Vous devriez le changer pour la valeur que vous avez notée plus tôt - c'était /tmp/mysql.sock dans mon cas.

Remplacez le fichier /etc/php.ini pour refléter le nom du fichier de socket:

mysql.default_socket = /tmp/mysql.sock
mysqli.default_socket = /tmp/mysql.sock

Vérification finale

Redémarrez Apache HTTP.

Sudo apachectl restart 

Vérifiez les journaux s'il n'y a pas d'erreur liée à PHP5. Aucune erreur ne signifie que vous avez terminé et PHP5 avec MySQL devrait fonctionner correctement. Félicitations!

33
Jacek Laskowski

Remplacer 'localhost' par '127.0.0.1' dans le fichier de configuration (connexion à la base de données) a aidé!

13
Oleg

Tout d'abord, assurez-vous que MySQL est en cours d'exécution. Commande: mysqld start

Si vous ne pouvez toujours pas vous connecter alors: À quoi ressemble votre /etc/my.cnf?

Les 2 autres postes sont corrects car vous devez vérifier votre socket car 2002 est une erreur de socket.

Un bon tutoriel sur la configuration de LAMP est: http://library.linode.com/lamp-guides/centos-5.3/index-print

9
Todd Moses

Développement de Réponse de Matthias D ici J'ai pu résoudre cette erreur 2002 à la fois sur MySQL et MariaDB avec des chemins exacts à l'aide de ces commandes:

Commencez par obtenir le chemin actuel vers le socket MySQL:

netstat -ln | grep -o -m 1 '/.*mysql.sock'

Ensuite, récupérez le PHP chemin:

php -r 'echo ini_get("mysql.default_socket") . "\n";'

En utilisant la sortie de ces deux commandes, liez-les:

Sudo ln -s /actualpath/mysql.sock /phppath/mysql.sock

Si cela renvoie No such file or directory, il vous suffit de créer le chemin d'accès à PHP mysql.sock. Par exemple, si votre chemin d'accès était /var/mysql/mysql.sock, vous devez exécuter:

Sudo mkdir -p /var/mysql

Ensuite, essayez à nouveau la commande Sudo ln.

6
mattbell87

J'ai rencontré ce problème aussi, puis j'ai modifié 'localhost' en '127.0.0.1', cela fonctionne.

6
JackSun

Je vérifierais votre fichier php.ini et vérifierais que mysql.default_socket est correctement configuré et également que votre mysqld est correctement configuré avec un fichier de socket auquel il peut accéder. La valeur par défaut typique est "/tmp/mysql.sock".

6
Myles

Cela ne vous aide pas beaucoup, mais dans les versions récentes (et même moins récentes ) de MySQL, le code d'erreur 2002 signifie «Impossible de se connecter au serveur MySQL local via socket [nom-de-socket ] ”, Alors cela pourrait vous en dire un peu plus.

6

Redémarrer le serveur mysql peut aider. Dans mon cas, le redémarrage du serveur a permis de gagner beaucoup de temps.

service mysql restart

P.S.- utilise Sudo service mysql restart pour un utilisateur non root.

5
Avani Khabiya

Assurez-vous que votre serveur local (MAMP, XAMPP, WAMP, etc.) est en cours d'exécution.

2
Husain Al Faraj

J'utilise PHP-FPM ou plusieurs versions de php sur mon serveur. Sur mon cas, je mets à jour la valeur de mysqli car il n’existe pas de paramètre de socket par défaut: 

mysqli.default_socket

à : 

mysql.default_socket = /path/to/mysql.sock

grâce à @Alec Gorge 

0
navotera

J'avais un problème similaire.
Fondamentalement, le problème est qu’il existe probablement deux instances de mysql en cours d’exécution.
A) Un sous /etc/init.d 
B) Lampe en cours d’installation dans/opt/lamp 
Solution :
Étape 1: - Trouvez toutes les instances mysql en cours d'exécution à l'aide de commnad "find/| grep mysqld"
Étape 2: - Arrêtez les services exécutés dans /etc/init.d à l’aide du service mysql stop
Étape 3: - Redémarrez vos services de lampe avec/opt/lamp/lamp restart 

Tu devrais être bon pour aller :)

0
Jignesh Rawal

J'ai installé MySQL en utilisant l'installateur. En fait, il n'y avait pas de répertoire de données à côté du répertoire 'bin'.

Donc, j'ai créé manuellement le répertoire 'data' sous "C:\Program Files\MySQL\MySQL Server 8.0". Et cela a fonctionné (changer le mot de passe root en suivant les étapes suggérées sur https://dev.mysql.com/doc/mysql-windows-excerpt/5.7/fr/resetting-permissions-windows.html .

0
Park JongBum

J'ai eu le même problème. Mon socket a finalement été trouvé dans /tmp/mysql.sock. Puis j'ai ajouté ce chemin à php.ini. J'ai trouvé le socket à cet endroit en vérifiant la page "Etat du serveur" dans MySQL Workbench. Si votre socket n'est pas dans /tmp/mysql.sock, alors MySQL Workbench pourrait peut-être vous dire où il se trouve? (Si vous utilisez MySQL Workbench ...)

0
Fom

Sur un Mac, avant de travailler dur, vérifiez simplement vos paramètres dans System Preferences > MySQL. Plus souvent qu'autrement, j'ai rencontré l'équipe qui rencontre ce problème depuis The MySQL Server Instance is stopped.

Cliquez sur le bouton Start MySQL Server pour lancer la magie.

0
Steven Ventimiglia