Tengo `PDOException: SQLSTATE [HY000] [2002] No existe tal archivo o directorio` cuando uso drush [cerrado]


21

Instalé Drush por primera vez (por lo que puede ser un error de configuración) y estoy tratando de actualizar a la última versión principal de Drupal.

Drush me está dando este error: estoy en una caja de 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.

1
¿Has completado estos pasos? Sé que puede no ser exactamente su problema, pero puede ayudar.
Chapabu

¿Qué versión de drush estás usando? Hay un problema que parece ser idéntico al tuyo: drupal.org/node/832472
F1234k

Estoy usando la versión drush-7.x-4.5 y drupal 7.9
FLY

Agregué los pasos que seguí a mi pregunta. Pareces como fichas similares que estás sugiriendo @Chapabu
VUELO el

1
Tiene un problema de conexión PHP / MySQL (no relacionado con Drupal) - stackoverflow.com/questions/2412009/…
Clive

Respuestas:


42

Así fue como lo resolví en macOS:

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

Fuente: Trabajando con Drush en Mamp .


Para mí, estaba buscando en "/ tmp" el archivo mysql.sock. Así que tuve que crear un enlace simbólico allí para mi instalación de MAMP. Solo digo para cualquiera que se encuentre con eso.
Patrick

37

En la configuración de su base de datos en el archivo settings.php para el sitio Drupal, intente cambiar el host a 127.0.0.1 en lugar de localhost.

reemplace el valor predeterminado: 'host' => 'localhost',

con: 'host' => '127.0.0.1',

He tenido este error en OS X XAMPP, pero la solución también debería aplicarse aquí. Como mencionó Clive, es un problema de conexión MySQL. Esta publicación tiene más información sobre el problema subyacente.


Solución ordenada y simple. Sin embargo, funciona por sitio, pero fue el truco aquí.
Ignacio Segura Postigo

La respuesta más popular no me funciona (estoy usando MAMP Pro), pero esta sí. ¡Gracias!
Kelley Curry

1
¡No! Esto podría hacer que Drush funcione ... pero posteriormente hace que Drupal falle
sea26.2

11

Explicación

La PDOException - error 2002 significa que su drush no puede conectarse al servidor de base de datos local MySQL a través del archivo socket (por ejemplo /tmp/mysql.sock) como está configurado en su php.ini.

En realidad, esto no está muy relacionado con drushsí mismo, es su configuración de PHP y ese error puede ser reproducido por:

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

Fijar

Si su MySQL funciona correctamente, asegúrese de que estos dos archivos:

  1. mysql_config --socket

    o: mysqladmin variables | grep socket

  2. php -i | grep -w default_socket

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

coincide y apunta al mismo archivo y ambos existen.

De lo contrario, verifique cuál es el correcto:

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

luego solucione el problema con una de las siguientes soluciones:

  • haga que el enlace simbólico apunte al mysql.sockzócalo Unix en funcionamiento (para MAMP, vea la respuesta de Andrew ),

    • por ejemplo, si está usando MAMP, puede hacer un enlace simbólico a la ubicación predeterminada:

      sudo ln -vs /Applications/MAMP/tmp/mysql /var/mysql
  • camino correcto de su pdo_mysql.default_socket, mysql.default_socketo mysqli.default_socketen suphp.ini

  • especificar unix_socketen su settings.phpen su $databasesvariable, por ejemplo

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

Solución de problemas

Otros casos extremos podrían ser:

  • permisos incorrectos (por ejemplo, a las carpetas principales),
  • estás fuera del espacio
  • tienes varias versiones de PHP, comprueba qué estás usando exactamente y qué configuración estás cambiando,
  • Depurar con XDebug:

    • echo '<?php xdebug_start_trace("/tmp/foo.log");' > init.php
    • drush -c init.php ev 'Database::getConnection("default", "default");'
    • o establecer xdebug.show_exception_trace=1en suxdebug.ini
  • Depuración: en OS X con sudo dtruss -fn mysqld, en Linux constrace
  • Ver también: la conexión MySQL no funciona: 2002 No existe tal archivo o directorio en SO

6

Estoy usando MAMP Pro y tuve este mismo problema. La manera más fácil que pude encontrar para solucionarlo fue agregar la siguiente línea a su matriz $ database en el archivo settings.php.

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

En su totalidad debería verse así:

$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',
        ),
    ),
);

El error exacto que recibía se veía así:

Excepción adicional no capturada lanzada mientras se maneja la excepción.

Original

PDOException: SQLSTATE [HY000] [2002] No existe tal archivo o directorio en drupal_is_denied () (línea 2193 de ...

Adicional

PDOException: SQLSTATE [HY000] [2002] No existe tal archivo o directorio en _registry_check_code () (línea 3477 de ...


El comando Drush finalizó de forma anormal debido a un error irrecuperable.


2
Esta fue la solución más rápida y fácil para mí usando MAMP
Ant

3

Resolví esto con los siguientes pasos, similares a las respuestas anteriores pero no iguales.

Agregar un enlace simbólico:

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

Encuentra el php.ini que se usa:

php -i | grep php.ini

Agregue la siguiente configuración a php.ini:

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

1

Esto se debe a un error de configuración en sus configuraciones PHP / SQL. En algún lugar, el socket que usa su servidor web y la línea de comando se configura de manera diferente. Recomiendo verificar su configuración de MySQL para ver qué socket de Unix está en uso, y luego asegurarse de que se use el mismo valor en todas las configuraciones y compilaciones de php.ini.

Si no puede arreglar la configuración, los siguientes pasos deberían funcionar:

  1. Obtenga la versión de desarrollo de Drush 5.x (http://ftp.drupal.org/files/projects/drush-All-versions-5.x-dev.tar.gz) e instálela en su lugar. Esto puede causar otros problemas, pero en general es bastante estable.
  2. En sus sitios de Drupal settings.php elimine la configuración de host y puerto para la conexión de la base de datos y agregue un 'unix_socket' => '/path/to/mysql.sock' para reemplazarlos.

Si todo esto parece complicado, una alternativa es cambiar el host en setting.php de localhost a 127.0.0.1. Esto hará que el sitio sea más lento, pero para un sitio de desarrollo puede no ser notable o importante. Para un sitio de producción, desea utilizar el zócalo Unix y debe resolver la configuración.


Esto es realmente lo que hace. Lo he probado innumerables veces.
asiby

1

Encontré una forma más fácil / alternativa de instalar drush en una Mac:

Instale homebrew pegando esto en una terminal independiente

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

Luego agregue drush ejecutando lo siguiente desde la misma terminal

brew install drush

Ejecutar estado drush funciona bien ahora.


1

Si está trabajando con la instalación de MySQL.com de MySQL, solo necesita apuntar PHP a la ubicación correcta para el .sockarchivo.

En su php.ini, agregue / modifique estas dos líneas:

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

Para encontrar la ubicación de su php.ini (puede que todavía no exista), use esto

php -i | grep php.ini

Si el php.iniarchivo aún no existe allí, créelo.


0

De acuerdo con otras respuestas que Drupal no puede encontrar el socket mysql. Las otras respuestas me ayudaron pero estaban incompletas para la instalación con el servicio oficial Oracle Mysql instalado. A saber, la ubicación predeterminada del archivo mysql.sock. Así que aquí hay un resumen de mis respuestas recomendadas dependiendo de su caso de uso:

Si usa mysql como se incluye en el paquete oficial de MAMP, use la respuesta de @Andrew Alexander:

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

Para el Oracle MYSQL oficial:

sudo mkdir /var/mysql
sudo ln -s /tmp/mysql.sock /var/mysql/mysql.sock

0

Para una configuración de MAMP 4, la solución estaba marcando "Hacer que esta versión esté disponible en la línea de comandos".

Configuración MAMP


0

Recibí el siguiente mensaje en la terminal:

(MAMP PRO + PHP 7)

El comando Blockquote Drush finalizó de forma anormal debido a un error irrecuperable.
[error] PDOException: SQLSTATE [HY000] [2002] No existe tal archivo o directorio en Drupal \ Component \ DependencyInjection \ PhpArrayContainer-> createService () Blockquote

Resolví el problema con la ayuda de estas instrucciones.


0

Olvidé que mi mysql local se ejecuta en un número de puerto único, así que estaba confundido por qué estaba obteniendo esto hasta que revisé mi configuración en otro sitio local.

$databases['default']['default'] = array (
  'database' => 'hou',
  'username' => 'root',
  'password' => '',
  'prefix' => '',
  'host' => '127.0.0.1',
  'port' => '3306',
  'driver' => 'mysql',
  'collation' => 'utf8mb4_general_ci',
);
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.