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.
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
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.
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é.
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
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%';
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
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!
Remplacer 'localhost' par '127.0.0.1' dans le fichier de configuration (connexion à la base de données) a aidé!
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
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.
J'ai rencontré ce problème aussi, puis j'ai modifié 'localhost' en '127.0.0.1', cela fonctionne.
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".
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.
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.
Assurez-vous que votre serveur local (MAMP, XAMPP, WAMP, etc.) est en cours d'exécution.
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
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 :)
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 .
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 ...)
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.