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

21

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 principale 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.
Jack Ryan
la source
1
Avez-vous terminé ces étapes? Je sais que ce n'est peut-être pas exactement votre problème, mais cela peut aider.
Chapabu
Quelle version de drush utilisez-vous? Il y a un problème qui semble être identique au vôtre: drupal.org/node/832472
F1234k
J'utilise la version drush-7.x-4.5 et drupal 7.9
FLY
a ajouté les étapes que j'ai suivies à ma question. Des coutures comme des staps similaires que vous sucez @Chapabu
FLY
1
Vous avez un problème de connexion PHP / MySQL (non lié à Drupal) - stackoverflow.com/questions/2412009/…
Clive

Réponses:

42

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 .

Jack Ryan
la source
Pour moi, il cherchait dans "/ tmp" le fichier mysql.sock. J'ai donc dû créer un lien symbolique vers mon installation MAMP. Juste FYI pour toute personne qui se heurte à cela.
Patrick
37

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. Ce post en a plus sur le problème sous-jacent.

darkcody
la source
Solution soignée et simple. Cela fonctionne sur une base par site, cependant, mais cela a fait l'affaire ici.
Ignacio Segura Postigo
La réponse la plus populaire ne fonctionne pas pour moi (j'utilise MAMP Pro), mais celle-ci le fait. Merci!
Kelley Curry
1
Non! Cela pourrait faire fonctionner Drush ... mais cela entraînera ensuite l'échec de Drupal
sea26.2
11

Explication

La 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é à drushlui-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 mysql.socksocket unix de travail (pour MAMP, voir la réponse d'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_socketou mysqli.default_socketdans votrephp.ini

  • spécifier unix_socketdans votre settings.phpdans votre $databasesvariable, par exemple

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

Dépannage

D'autres cas de bord pourraient être:

  • de mauvaises autorisations (par exemple sur les dossiers parents),
  • vous êtes à court d'espace,
  • vous avez plusieurs versions de PHP, vérifiez laquelle utilisez-vous exactement 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 mis xdebug.show_exception_trace=1dans votrexdebug.ini
  • Débogage: sous OS X avec sudo dtruss -fn mysqld, sous Linux avecstrace
  • Voir aussi: La connexion MySQL ne fonctionne pas: 2002 Aucun fichier ou répertoire de ce type à SO
kenorb
la source
6

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 ...


La commande Drush s'est terminée anormalement en raison d'une erreur irrécupérable.

digitalblake
la source
2
ce fut la solution la plus rapide et la plus simple pour moi en utilisant MAMP
four
3

J'ai résolu ce problème 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
Ryrye
la source
1

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 site Drupal 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 perceptible ou important. Pour un site de production, vous souhaitez utiliser le socket Unix et devez trier la configuration.

Kjartan
la source
C'est vraiment ce qui fait ça. Je l'ai testé d'innombrables fois.
asiby
1

Trouvé une manière plus simple / alternative 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.

MOUCHE
la source
1

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

Dans votre 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 le php.inifichier n'existe pas encore, créez-le.

Chris Burgess
la source
0

Soyez d'accord avec d'autres réponses que Drupal ne peut pas trouver la 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
bdombro
la source
0

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

Configuration de MAMP

Shaun Dychko
la source
0

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

lesley n.
la source
0

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',
);
powpow12
la source