web-dev-qa-db-fra.com

Avertissement: mysql_connect (): [2002] Aucun fichier ou répertoire de ce type (essayant de se connecter via unix: ///tmp/mysql.sock) dans

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

Hier, cela a bien fonctionné, et maintenant, l’erreur dans le titre s’apparaît soudainement.

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

Voici le fichier que j'inclus pour me connecter (le script fonctionne quand je n'inclus pas cela, mais ensuite il ne se connecte pas à la base de données):

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

Cela devrait fonctionner, car cela fonctionne avec mon navigateur.

La commande que j'utilise au terminal est php scriptname.php.

239
Nr 28

Pour une raison quelconque, mysql sur OS X obtient un peu faux les emplacements du fichier de socket requis, mais heureusement, la solution est aussi simple que de configurer un lien symbolique.

Vous pouvez avoir un socket (apparaissant comme un fichier de longueur nulle) sous le nom /tmp/mysql.sock ou /var/mysql/mysql.sock, mais une ou plusieurs applications le recherchent à un autre emplacement. Découvrez avec cette commande:

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

Plutôt que de déplacer le socket, éditez les fichiers de configuration et devez vous rappeler de garder les fichiers édités locaux et éloignés des serveurs où les chemins sont corrects, créez simplement un lien symbolique afin que votre Mac trouve le socket requis, même lorsqu'il cherche au mauvais endroit !

Si vous avez /tmp/mysql.sock mais pas /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 pas /tmp/mysql.sock alors ...

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

Vous aurez besoin d’autorisations pour créer le répertoire et le lien. Vous devez donc préfixer Sudo si nécessaire.

412
Brian Lowe

J'ai aussi eu cette erreur, mais je ne pouvais le réparer que par la suggestion ici .

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 lui permettant d’utiliser le socket UNIX pour se connecter à MySQL au lieu du socket TCP.

360
luismreis

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

J'ai eu ça et ça n'a pas marché:

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

Je l'ai fait 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 au socket Unix. Travaillé pour moi.

24
Caio

Le socket MySQL se trouve généralement dans /tmp/mysql.sock ou /var/mysql/mysql.sock, mais probablement PHP semble au mauvais endroit.

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

     Sudo /usr/libexec/locate.updatedb
    
  2. Lorsque le updatedb est terminé:

     locate mysql.sock
    
  3. Puis localisez votre php.ini:

     php -i | grep php.ini
    

    cela produira quelque chose comme:

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

     Sudo vim /opt/local/etc/php54/php.ini
    
  5. Changer 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 de votre socket.

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

  7. Redémarrer Apache

     Sudo apachectl stop
     Sudo apachectl start
    
21
noun

Je suis sur 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 actuellement dans le dossier "/ Applications/xampp/xamppfiles/var/mysql /". Il fallait donc le lier à la fois dans/tmp et/var/mysql. Je n'ai pas vérifié lequel est utilisé par la ligne de commande PHP, mais cela a résolu le problème, alors je suis heureux :-)

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
11
Nirav Mehta

Mac OS X EL Capitan + MAMP Pro Faites ceci

cd /var
Sudo mkdir mysql
Sudo chmod 755 mysql
cd mysql
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

Alors fais ça

cd /tmp
Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock mysql.sock

J'espère que cela vous fait gagner du temps.

10
Jsonras

La raison en est que php ne peut pas trouver le chemin correct de mysql.sock.

Veuillez vous assurer que votre mysql est en cours d'exécution en premier.

Ensuite, veuillez confirmer quel chemin est le mysql.sock situé, par exemple /tmp/mysql.sock

puis ajoutez cette chaîne de chemin à php.ini:

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

Enfin, redémarrez Apache.

6
brucenan

Lorsque vous faites face au problème suivant:

Erreur de projection PHP "Avertissement: mysql_connect () http: //function.mysql-connect : 2002 Aucun fichier ou répertoire de ce type (essaye de se connecter via unix: ///tmp/mysql.sock)"

Définissez la valeur "mysql.default_socket" dans votre /etc/php.ini sur

 "mysql.default_socket = /var/mysql/mysql.sock". 

Puis redémarrez le service Web dans l'administrateur du serveur

6
cristian

Correction de l'erreur de socket 2002 imminente - qui lie où MySQL place le socket et où OSX le pense, MySQL le place dans/tmp et OSX le recherche dans/var/mysql le socket est un type de fichier qui permet au client mysql/communication serveur.

Sudo mkdir /var/mysql

puis

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

source: http://coolestguidesontheplanet.com/get-Apache-mysql-php-phpmyadmin-working-osx-10-10-yosemite/

2
kingus

j'avais le même problème

[PDOException] SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type

[ErrorException] Avertissement: PDO :: __ construct (): [2002] Aucun fichier ou répertoire de ce type (essayant de se connecter via unix: ///var/mysql/mysql.sock) dans… htdocs /Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Driver/PDOConnection.php

La solution consiste donc à créer un lien symbolique vers le fichier chaussette, résolvant ainsi le problème. Procédez comme suit pour le résoudre:

$ Sud mkdir/private/var/mysql/

$ Sudo ln -s /Applications/MAMP/tmp/mysql/mysql.sock /private/var/mysql/mysql.sock

source: http://www.reecefowell.com/2012/07/21/symfony2-cli-does-not-connect-to-mysql-while-browser-works-fine/

1
tanveer ahmad dar

Une autre solution consiste à corriger l’emplacement du socket dans le fichier de configuration php.ini comme ceci:

pdo_mysql.default_socket=/tmp/mysql.sock

Bien sûr, le lien symbolique fonctionne aussi, alors c'est une question de préférence que vous changez.

1
Michael Böckling

Lorsque vous installez php53-mysql en utilisant le port, il renvoie le message suivant, qui constitue la solution à ce problème:

To use mysqlnd with a local MySQL server, edit /opt/local/etc/php53/php.ini
and set mysql.default_socket, mysqli.default_socket and
pdo_mysql.default_socket to the path to your MySQL server's socket file.

For mysql5, use /opt/local/var/run/mysql5/mysqld.sock
For mysql51, use /opt/local/var/run/mysql51/mysqld.sock
For mysql55, use /opt/local/var/run/mysql55/mysqld.sock
For mariadb, use /opt/local/var/run/mariadb/mysqld.sock
For percona, use /opt/local/var/run/percona/mysqld.sock
1
Sheric

J'ai les mêmes erreurs. Mysql s'exécutait en tant qu'application autonome avant de démarrer phpMyAdmin.

Je viens d’arrêter mysql Puis Sudo/Applications/XAMPP/xamppfiles/xampp arrête Sudo/Applications/XAMPP/xamppfiles/xampp

Ça a bien fonctionné

0
minhas23

Puisque vous pouvez utiliser MAMP, changez votre port sur le 3306 par défaut ou utilisez 127.0.0.1 dans le fichier database.php.

$db['default'] = array(
    'dsn'   => '',
    'hostname' => 'localhost',// leave it for port 3306
    'username' => 'yourUserhere',
    'password' => 'yourPassword',
    'database' => 'yourDatabase',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

Ou avec les paramètres par défaut:

$db['default'] = array(
        'dsn'   => '',
        'hostname' => '127.0.0.1:8889',// leave it for port 8889
        'username' => 'yourUserhere',
        'password' => 'yourPassword',
        'database' => 'yourDatabase',
        'dbdriver' => 'mysqli',
        'dbprefix' => '',
        'pconnect' => FALSE,
        'db_debug' => (ENVIRONMENT !== 'production'),
        'cache_on' => FALSE,
        'cachedir' => '',
        'char_set' => 'utf8',
        'dbcollat' => 'utf8_general_ci',
        'swap_pre' => '',
        'encrypt' => FALSE,
        'compress' => FALSE,
        'stricton' => FALSE,
        'failover' => array(),
        'save_queries' => TRUE
    );
0
Cyber

Je viens d'avoir ce problème, mais il n'est apparu que lors du chargement de certaines pages (d'autres pages ont bien fonctionné). Il s’est avéré que j’appelais MySQL après avoir fermé la connexion avec mysql_close(). Donc, comme @brucenan a dit: assurez-vous que MySQL est en marche lorsque vous l'appelez.

0
RoberRM

Vous pouvez le faire en aliasant simplement le MAMP php sur le terminal Apple:

alias phpmamp='/Applications/MAMP/bin/php/php7.0.0/bin/php'

Exemple: > phpmamp - v

Maintenant, vous pouvez exécuter quelque chose comme: > phpmamp scriptname.php

Remarque: Ceci ne sera appliqué qu'à la session de terminal en cours.

0
Naresh Chennuri

Le client mySQL tente par défaut de se connecter via un fichier local appelé socket au lieu de se connecter à l'adresse de bouclage (127.0.0.1) pour localhost.

L'emplacement par défaut de ce fichier de socket, du moins sous OSX, est /tmp/mysql.sock.

SOLUTION RAPIDE ET MOINS ÉLÉGANTE

Créez un lien symbolique pour que le système d'exploitation trouve le bon socket.

ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp

Bonne solution

Modifiez le chemin d'accès au socket défini dans le fichier startMysql.sh dans /Applications/MAMP/bin.

0
ashark