web-dev-qa-db-fra.com

J'ai `PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type` lors de l'utilisation de drush

J'ai installé Drush pour la première fois (il peut donc s'agir d'une erreur de configuration) et j'essaie de mettre à jour vers la dernière version de base de Drupal.

Drush me donne cette erreur - je suis sur une boîte OSX.

dev5:clientnamedirectory my.name$ drush pm-update projects drupal-7.25
<h1>Additional uncaught exception thrown while handling exception.</h1>

<h2>Original</h2><p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in drupal_get_installed_schema_version() (line 155 of /Users/my.name/Sites/proface/includes/install.inc).</p>

<h2>Additional</h2>

<p>PDOException: SQLSTATE[HY000] [2002] No such file or directory in system_list() (line 165 of /Users/my.name/Sites/clientnamedirectory/includes/module.inc).</p><hr />

Drush command terminated abnormally due to an unrecoverable error.
21
Jack Ryan

C'est ainsi que je l'ai résolu sur macOS:

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

Source: Travailler avec Drush sur Mamp .

42
Jack Ryan

Dans votre configuration de base de données dans le fichier settings.php pour le site Drupal, essayez de changer l'hôte en 127.0.0.1 au lieu de localhost.

remplacer la valeur par défaut: 'Host' => 'localhost',

avec: 'Host' => '127.0.0.1',

J'ai eu cette erreur sur OS X XAMPP, mais la solution devrait également s'appliquer ici. Comme Clive l'a mentionné, c'est un problème de connexion MySQL. Cet article a plus sur le problème sous-jacent.

37
darkcody

Explication

PDOException - erreur 2002 signifie que votre drush ne peut pas se connecter au serveur de base de données local MySQL via le fichier socket (par exemple /tmp/mysql.sock) Tel que configuré dans votre php.ini.

Ce n'est pas vraiment lié à drush lui-même, c'est votre configuration PHP et cette erreur peut être reproduite par:

php -r "new PDO('mysql:Host=localhost;port=3306;charset=utf8;dbname=dbname', 'root', 'root');"

Réparer

Si votre MySQL fonctionne correctement, assurez-vous que ces deux fichiers:

  1. mysql_config --socket

    ou: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

    ou: php -r 'phpinfo();' | grep -w default_socket

correspondant et pointe vers le même fichier et ils existent tous les deux.

Sinon, vérifiez lequel est correct en:

mysql --socket=/path/to/mysql.sock

puis résolvez le problème par l'une des solutions suivantes:

  • faire le lien symbolique pour pointer vers la socket unix mysql.sock qui fonctionne (pour MAMP, voir réponse Andrew ),

    • par exemple, si vous utilisez MAMP, vous pouvez créer un lien symbolique vers l'emplacement par défaut:

      Sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
      
  • chemin correct de votre pdo_mysql.default_socket, mysql.default_socket ou mysqli.default_socket dans votre php.ini

  • spécifiez unix_socket dans votre settings.php dans votre variable $databases, par exemple.

    $databases['default']['default'] = array(
      // ...
      'unix_socket' => '/var/mysql/mysql.sock',
    

Dépannage

D'autres cas Edge pourraient être:

  • de mauvaises autorisations (par exemple sur les dossiers parents),
  • vous êtes à court d'espace,
  • vous avez plusieurs versions PHP, vérifiez quelles sont exactement celles que vous utilisez et quelle configuration modifiez-vous,
  • Déboguer avec XDebug:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • ou définissez xdebug.show_exception_trace=1 dans votre xdebug.ini
  • Débogage: sous OS X avec Sudo dtruss -fn mysqld, Sous Linux avec strace
  • Voir aussi: La connexion MySQL ne fonctionne pas: 2002 Aucun fichier ou répertoire de ce type sur SO
11
kenorb

J'utilise MAMP Pro et j'ai eu ce même problème. Le moyen le plus simple que j'ai trouvé pour le corriger était d'ajouter la ligne suivante à votre tableau $ database dans le fichier settings.php.

'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',

Dans son intégralité, cela devrait ressembler à ceci:

$databases = array (
    'default' =>
     array (
        'default' =>
        array (
            'database' => 'your_database_name',
            'username' => 'username',
            'password' => 'password',
            'Host' => 'localhost',
            'port' => '',
            'driver' => 'mysql',
            'prefix' => '',
            'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
        ),
    ),
);

L'erreur exacte que je recevais ressemblait à ceci:

Exception non capturée supplémentaire levée lors de la gestion de l'exception.

Original

PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type dans drupal_is_denied () (ligne 2193 de ...

Additionnel

PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type dans _registry_check_code () (ligne 3477 de ...


6
digitalblake

J'ai résolu cela avec les étapes suivantes, similaires aux réponses précédentes mais pas les mêmes.

Ajoutez un lien symbolique:

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

Trouvez le php.ini utilisé:

php -i | grep php.ini

Ajoutez les paramètres suivants à php.ini:

pdo_mysql.default_socket= /var/mysql/mysql.sock
mysql.default_socket = /var/mysql/mysql.sock
mysqli.default_socket = /var/mysql/mysql.sock
3
ryrye

Trouvé un moyen plus simple/alternatif d'installer drush sur un Mac:

Installez homebrew en le collant dans un terminal autonome

/usr/bin/Ruby -e "$(curl -fsSL https://raw.github.com/Gist/323731)"

Ensuite, ajoutez drush en exécutant ce qui suit à partir du même terminal

brew install drush

L'exécution du statut drush fonctionne désormais correctement.

1
FLY

Cela est dû à une erreur de configuration dans vos configurations PHP/SQL. Quelque part, le socket utilisé par votre serveur Web et la ligne de commande sont configurés différemment. Je recommande de vérifier votre configuration MySQL pour voir quel socket unix est utilisé, puis assurez-vous que la même valeur est utilisée dans toutes les configurations et compilations php.ini.

Si vous ne pouvez pas corriger la configuration, les étapes suivantes devraient fonctionner:

  1. Obtenez la version de développement de Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) et installez-la à la place. Cela pourrait provoquer d'autres problèmes, mais dans l'ensemble, c'est assez stable.
  2. Dans votre Drupal sites settings.php supprimez les paramètres d'hôte et de port pour la connexion à la base de données et ajoutez un 'unix_socket' => '/path/to/mysql.sock' pour les remplacer.

Si tout cela semble compliqué, une alternative est de changer l'hôte dans setting.php de localhost à 127.0.0.1. Cela ralentira le site, mais pour un site de développement, il peut ne pas être visible ou important. Pour un site de production, vous souhaitez utiliser le socket Unix et devez trier la configuration.

1
Kjartan

Si vous travaillez avec l'installation MySQL.com de MySQL, il vous suffit de pointer PHP au bon endroit pour le .sock fichier.

Dans ton php.ini, ajoutez/modifiez ces deux lignes:

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

Pour trouver l'emplacement de votre php.ini (il n'existe peut-être pas encore), utilisez ce

php -i | grep php.ini

Si la php.ini le fichier n'existe pas encore, créez-le.

1
Chris Burgess

J'ai oublié que mon mysql local fonctionne sur un numéro de port unique, donc je ne savais pas pourquoi j'obtenais cela jusqu'à ce que j'examine ma configuration sur un autre site local.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'Host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
0
powpow12

D'accord avec d'autres réponses qui Drupal ne peut pas trouver le socket mysql. Les autres réponses m'ont aidé mais étaient incomplètes pour l'installation avec le service officiel Oracle Mysql installé. À savoir, l'emplacement par défaut du fichier mysql.sock Voici donc un récapitulatif de mes réponses recommandées en fonction de votre cas d'utilisation:

Si vous utilisez mysql tel qu'il est inclus dans le package officiel MAMP, utilisez la réponse de @Andrew Alexander:

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

Pour Oracle MYSQL officiel:

Sudo mkdir /var/mysql
Sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock
0
bdombro

Pour une configuration MAMP 4, la solution consistait à cocher "Rendre cette version disponible sur la ligne de commande".

MAMP configuration

0
Shaun Dychko

J'ai reçu le message suivant dans le terminal:

(MAMP PRO + PHP 7)

La commande Blockquote Drush s'est terminée anormalement en raison d'une erreur irrécupérable.
[erreur] PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type dans Drupal\Component\DependencyInjection\PhpArrayContainer-> createService () Blockquote

J'ai résolu le problème à l'aide de ces instructions

0
lesley n.