web-dev-qa-db-fra.com

Où drush recherche-t-il le chemin du socket mysql (sur MAMP)?

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.

4
Kevin Van Humbeeck

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

4
kenorb

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

0
Kevin Van Humbeeck