PDOException SQLSTATE[HY000] [2002] No existe tal archivo o directorio

Resuelto Daniel Hollands asked hace 54 años • 38 respuestas

Creo que implementé exitosamente mi sitio (muy básico) en fortrabbit, pero tan pronto como me conecto a SSH para ejecutar algunos comandos (como php artisan migrateo php artisan db:seed), aparece un mensaje de error:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

En algún momento la migración debe haber funcionado, porque mis tablas están ahí, pero esto no explica por qué no me funciona ahora.

Daniel Hollands avatar Jan 01 '70 08:01 Daniel Hollands
Aceptado

Una de las razones más simples de este error es que no se está ejecutando un servidor MySQL. Así que verifica eso primero. En caso de que esté arriba, procede a otras recomendaciones:

Laravel 4: cambie "host" en el app/config/database.phparchivo de "localhost" a "127.0.0.1"

Laravel 5+: cambie "DB_HOST" en el .envarchivo de "localhost" a "127.0.0.1"

Tuve exactamente el mismo problema. Ninguna de las soluciones anteriores funcionó para mí. Resolví el problema cambiando el "host" en el archivo /app/config/database.php de "localhost" a "127.0.0.1".

No estoy seguro de por qué "localhost" no funciona de forma predeterminada, pero encontré esta respuesta en una pregunta similar resuelta en una publicación de Symfony2. https://stackoverflow.com/a/9251924

Actualización: algunas personas han preguntado por qué funciona esta solución, así que investigué un poco sobre el tema. Parece que usan diferentes tipos de conexión como se explica en esta publicación https://stackoverflow.com/a/9715164

El problema que surgió aquí es que "localhost" usa un socket UNIX y no puede encontrar la base de datos en el directorio estándar. Sin embargo, "127.0.0.1" usa TCP (Protocolo de control de transmisión), lo que esencialmente significa que se ejecuta a través de la "Internet local" de su computadora, siendo mucho más confiable que el socket UNIX en este caso.

stuyam avatar Apr 08 '2014 04:04 stuyam

El mensaje de error indica que se intenta una conexión MySQL a través de socket (que no es compatible).

En el contexto de Laravel (artesano), probablemente desee utilizar un entorno diferente o correcto. Por ejemplo: php artisan migrate --env=production(o cualquier entorno). Mira aquí .

ukautz avatar Dec 22 '2013 19:12 ukautz

Tengo el mismo problema y estoy ejecutando Mac OS X 10.10 Yosemite. He habilitado el servidor Apache y PHP que ya viene con el sistema operativo. Luego configuré la biblioteca mCrypt para comenzar. Después de eso, cuando estaba trabajando con modelos y base de datos, recibí el error:

[PDOException]
SQLSTATE[HY000] [2002] No such file or directory

La razón por la que encontré es simplemente porque PHP y MySQL no pueden conectarse por sí solos. Para solucionar este problema, sigo los siguientes pasos:

  1. Abra una terminal y conéctese a mysql con:

    mysql -u root -p
    
  2. Le pedirá la contraseña relacionada. Luego, una vez que obtenga el mensaje de MySQL, escriba el siguiente comando:

    mysql> show variables like '%sock%'
    
  3. Obtendrá algo como esto:

    +-----------------------------------------+-----------------+
    | Variable_name                           | Value           |
    +-----------------------------------------+-----------------+
    | performance_schema_max_socket_classes   | 10              |
    | performance_schema_max_socket_instances | 322             |
    | socket                                  | /tmp/mysql.sock |
    +-----------------------------------------+-----------------+
    
  4. Mantenga el valor de la última fila:

    /tmp/mysql.sock
    
  5. En laravella carpeta de su proyecto, busque el archivo Database.php , allí es donde configura los parámetros de conexión a la base de datos. En la sección mysql agregue la siguiente línea al final:

    'unix_socket' => '/tmp/mysql.sock'
    
  6. Debes tener algo como esto:

    'mysql' => array(
            'driver'    => 'mysql',
            'host'      => 'localhost',
            'database'  => 'SchoolBoard',
            'username'  => 'root',
            'password'  => 'venturaa',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'unix_socket' => '/tmp/mysql.sock',
        ),
    

Ahora simplemente guarde los cambios, vuelva a cargar la página y ¡debe funcionar!

alexventuraio avatar Mar 06 '2015 18:03 alexventuraio

Encontré el [PDOException] SQLSTATE[HY000] [2002] No such file or directoryerror por una razón diferente. Acababa de terminar de construir una nueva pila LAMP en Ubuntu 12.04 con Apache 2.4.7, PHP v5.5.10 y MySQL 5.6.16. Moví mis sitios nuevamente y los encendí. Pero no pude cargar mi sitio basado en Laravel 4.2.x debido a lo [PDOException]anterior. Entonces, revisé php -i | grep pdoy noté esta línea:

pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

Pero, en mi /etc/my.cnf, el archivo sock en realidad está en formato /var/run/mysqld/mysqld.sock.

Entonces, abrí mi php.ini y configuré el valor para pdo_mysql.default_socket:

pdo_mysql.default_socket=/var/run/mysqld/mysqld.sock

Luego, reinicié Apache y verifiqué php -i | grep pdo:

pdo_mysql.default_socket => /var/run/mysqld/mysqld.sock => /var/run/mysqld/mysqld.sock

Eso me solucionó.

dcarrith avatar Mar 20 '2014 03:03 dcarrith