Après la mise à niveau de drush 6.5.0
à 8.0.1-dev
à brew, la commande drush terminal renvoie le populaire
Erreur "PDOException: SQLSTATE [HY000] [2002]".
La seule façon de le faire fonctionner est d'ajouter la ligne unix_socket à mon Drupal settings.php
fichiers pour tous mes projets:
$databases = array (
'default' =>
array (
'default' =>
array (
'database' => 'site',
'username' => 'user',
'password' => 'pass',
'Host' => 'localhost',
'port' => '',
'driver' => 'mysql',
'prefix' => '',
'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
),
),
);
Même si j'utilise /var/mysql/mysql.sock
, cela fonctionnera, car j'ai un lien symbolique vers le haut:
lrwxr-xr-x 1 root wheel 39B Mar 11 2015 /var/mysql/mysql.sock -> /Applications/MAMP/tmp/mysql/mysql.sock
Mais c'est exactement la chose que je ne comprends pas. Et je voudrais le configurer à un moment donné pour ne pas avoir à modifier tous les projets en cours et à venir settings.php
des dossiers.
Donc ma question est: Où drush cherche-t-il le chemin du socket mysql (sur MAMP)?
Si c'est par le php.ini
, il devrait également être correct (/Applications/MAMP/bin/php/php5.6.10/conf/php.ini):
mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock
Actuellement, mon .bash_profile
ne contient aucun alias ou exportation lié à ce problème, car cela a bien fonctionné avec mon installation drush précédente.
Tout d'abord, vérifiez quels php
et php.ini
le fichier est utilisé par drush
:
$ drush status --full
Site URI : http://default
Database driver : mysql
Database hostname : localhost
Database username : root
Database name : drupal7
Drupal bootstrap : Successful
Drupal user :
PHP executable : /usr/local/opt/php56/bin/php
PHP configuration : /usr/local/etc/php/5.6/php.ini
Modifiez ensuite son socket MySQL par défaut nom pour les connexions locales à la base de données:
pdo_mysql.default_socket=/path/to/mysql.sock
comme par défaut, il pointe sur /tmp/mysql.sock
sauf si PHP a été configuré avec différents (--with-mysql-sock
).
Vérifier par:
$ php -i | grep ^pdo_mysql.default_socket
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock
C'est probablement pourquoi /var/mysql/mysql.sock
n'a pas fonctionné, car il cherchait /tmp/mysql.sock
au lieu.
Ensuite, le lien symbolique devrait fonctionner comme prévu.
Si drush
utilise une mauvaise instance de PHP, ajoutez-la dans PATH
(comme vous l'avez fait) ou spécifiez avec --php=</path/to/file>
, donc le bon php.ini
serait chargé.
Vous pouvez également spécifier unix_socket
dans votre fichier de paramètres (comme vous l'avez déjà fait).
Trouvé la solution ...
drush status
affiche le chemin PHP exécutable était le chemin natif OSX, qui a ensuite été lié à un PHP installé par brew)
ajout de la ligne suivante à ~/.bash_profile
export PATH="/Applications/MAMP/bin/php/php5.6.10/bin:/Applications/MAMP/Library/bin:$PATH"
rendu drush chercher dans le bon fichier php.ini
mais pour moi, c'est toujours un mystère pourquoi le lien symbolique
lrwxr-xr-x 1 root wheel 39B Mar 11 2015 /var/mysql/mysql.sock -> /Applications/MAMP/tmp/mysql/mysql.sock
n'a pas fait l'affaire