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.
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 .
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.
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');"
Si votre MySQL fonctionne correctement, assurez-vous que ces deux fichiers:
mysql_config --socket
ou: mysqladmin variables | grep socket
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'autres cas Edge pourraient être:
Déboguer avec XDebug:
echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
drush -c init.php ev 'Database::getConnection("default", "default");'
xdebug.show_exception_trace=1
dans votre xdebug.ini
Sudo dtruss -fn mysqld
, Sous Linux avec strace
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:
PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type dans drupal_is_denied () (ligne 2193 de ...
PDOException: SQLSTATE [HY000] [2002] Aucun fichier ou répertoire de ce type dans _registry_check_code () (ligne 3477 de ...
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
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.
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:
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.
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.
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',
);
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
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