PDOException SQLSTATE[HY000] [2002] No existe tal archivo o directorio
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 migrate
o 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.
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.php
archivo de "localhost" a "127.0.0.1"Laravel 5+: cambie "DB_HOST" en el
.env
archivo 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.
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í .
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:
Abra una terminal y conéctese a mysql con:
mysql -u root -p
Le pedirá la contraseña relacionada. Luego, una vez que obtenga el mensaje de MySQL, escriba el siguiente comando:
mysql> show variables like '%sock%'
Obtendrá algo como esto:
+-----------------------------------------+-----------------+ | Variable_name | Value | +-----------------------------------------+-----------------+ | performance_schema_max_socket_classes | 10 | | performance_schema_max_socket_instances | 322 | | socket | /tmp/mysql.sock | +-----------------------------------------+-----------------+
Mantenga el valor de la última fila:
/tmp/mysql.sock
En
laravel
la 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'
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!
Encontré el [PDOException] SQLSTATE[HY000] [2002] No such file or directory
error 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 pdo
y 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ó.