247 votes

Attention : mysql_connect() : [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in

J'essaie de me connecter à ma base de données MySQL avec le terminal de mon Apple (avec PHP).

Hier, cela a bien fonctionné, et maintenant j'obtiens soudainement l'erreur dans le titre.

Le script fonctionne lorsque j'utilise mon navigateur pour l'exécuter (j'ai installé XAMPP), mais Terminal refuse de se connecter à la BD.

Voici le fichier que j'inclus pour me connecter (le script fonctionne quand je ne l'inclus pas, mais alors il ne se connecte pas à la BD) :

<?php
    mysql_connect("localhost", "root", "") or die(mysql_error());
    mysql_select_db("FNB1C_data") or die(mysql_error());
?>

Cela devrait fonctionner, puisque cela fonctionne avec mon navigateur.

La commande que j'utilise dans le terminal est php scriptname.php .

420voto

Brian Lowe Points 2490

Pour une raison quelconque, mysql sous OS X se trompe un peu dans l'emplacement du fichier socket requis, mais heureusement la solution est aussi simple que de mettre en place un lien symbolique.

Vous pouvez avoir un socket (apparaissant comme un fichier de longueur nulle) comme /tmp/mysql.sock o /var/mysql/mysql.sock mais une ou plusieurs applications le recherchent à l'autre endroit. Découvrez-le avec cette commande :

ls -l /tmp/mysql.sock /var/mysql/mysql.sock

Plutôt que de déplacer le socket, de modifier les fichiers de configuration, et de devoir se rappeler de garder les fichiers modifiés en local et loin des serveurs où les chemins sont corrects, il suffit de créer un lien symbolique pour que votre Mac trouve le socket requis, même s'il cherche au mauvais endroit !

Si vous avez /tmp/mysql.sock mais non /var/mysql/mysql.sock alors...

cd /var 
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock

Si vous avez /var/mysql/mysql.sock mais non /tmp/mysql.sock alors...

cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock

Vous aurez besoin de permissions pour créer le répertoire et le lien, donc préfixez les commandes ci-dessus avec sudo si nécessaire.

0 votes

Bonne réponse. La réparation a fonctionné pour moi. Savez-vous pourquoi cela peut fonctionner une fois puis ne plus fonctionner ? J'ai eu le même problème.

17 votes

C'est plutôt bidon. Je recommande plutôt la réponse de @luismreis pour contourner ce raccourci caché de MySQL.

2 votes

Ça n'a pas marché pour moi... Je n'ai aucun de ces fichiers. Mais la réponse de luismreis a fonctionné !

374voto

luismreis Points 1841

J'ai également eu cette erreur, mais je n'ai pu la résoudre qu'en suivant cette suggestion. aquí .

Pour résumer, utilisez :

127.0.0.1

Au lieu de :

localhost

La raison en est que "localhost" est un nom spécial pour le pilote MySQL qui lui permet d'utiliser le socket UNIX pour se connecter à MySQL au lieu d'un socket TCP.

1 votes

Si cela fonctionne, vérifiez votre hosts il se peut que le fichier soit manquant ou endommagé.

3 votes

Il est peut-être bon aussi de le mentionner : Si vous utilisez MAMP comme moi, vous devez décocher la case "Autoriser l'accès local uniquement".

0 votes

Cette solution entraîne une surcharge supplémentaire car le paquet est d'abord envoyé par le routeur. Ce n'est généralement pas un gros problème lors des tests, mais cela peut le devenir avec de gros paquets de données.

25voto

Caio Points 121

J'avais le même problème et voici comment je l'ai résolu :

J'avais ça et ça n'a pas marché :

$con = mysql_connect('localhost', 'root', '1234');

J'ai fait ça et ça a marché :

$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');

Au lieu d'utiliser le serveur mysql, je me suis connecté directement à l'Unix Socket. Cela a fonctionné pour moi.

0 votes

C'est la seule solution qui a fonctionné pour moi aussi. Je n'ai pas de /var/mysql/mysql.sock. Et je n'ai pas de /tmp/mysql.sock.

0 votes

Avez-vous essayé 127.0.0.1 au lieu de localhost ?

22voto

noun Points 168

Le socket MySQL est situé, en général, dans /tmp/mysql.sock o /var/mysql/mysql.sock mais le PHP regarde probablement au mauvais endroit.

  1. Vérifiez où se trouve votre prise :

     sudo /usr/libexec/locate.updatedb
  2. Lorsque la mise à jourb est terminée :

     locate mysql.sock
  3. Ensuite, localisez votre php.ini :

     php -i | grep php.ini

    cela donnera quelque chose comme :

     Configuration File (php.ini) Path => /opt/local/etc/php54
     Loaded Configuration File => /opt/local/etc/php54/php.ini
  4. Modifiez votre php.ini

     sudo vim /opt/local/etc/php54/php.ini
  5. Changez les lignes :

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

    où /tmp/mysql.sock est le chemin vers votre socket.

  6. Enregistrez vos modifications et quittez ESC + SHIFT : x

  7. Redémarrer Apache

     sudo apachectl stop
     sudo apachectl start

0 votes

Je n'ai pas de php.ini ; je n'ai qu'un php.ini.default, il semble donc que la solution de contournement ici soit nécessaire : apple.stackexchange.com/questions/65802/ Cependant, cela n'a pas fonctionné pour moi.

0 votes

@user124384 Votre installation est probablement cassée : renommez votre php.ini.default a php.ini .

0 votes

Apache peut être redémarré avec une seule ligne : sudo apachectl restart

13voto

Nirav Mehta Points 91

Je suis sous XAMPP sur Mac OS X, et La solution de Brian Lowe ci-dessus a fonctionné avec une légère modification .

Le fichier mysql.sock se trouve en fait dans le dossier "/Applications/xampp/xamppfiles/var/mysql/". Il faut donc le lier à la fois dans /tmp et /var/mysql. Je n'ai pas vérifié lequel est utilisé par la ligne de commande de PHP, mais cela a permis de corriger le problème, donc je suis content :-)

sudo su
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /tmp/mysql.sock
mkdir /var/mysql
ln -s /Applications/xampp/xamppfiles/var/mysql/mysql.sock /var/mysql/mysql.sock

1 votes

Ty - J'ai cherché pendant plusieurs jours une solution et c'est celle qui a finalement arrangé les choses ! =) XAMPP sur OS X aussi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X