such sqlstate refused pdoexception hy000 error php laravel-4 laravel-5 fortrabbit

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



sqlstate[hy000][2002] no such file or directory magento (28)

Laravel 4: Cambie "host" en el archivo app/config/database.php de "localhost" a "127.0.0.1"

Laravel 5: Cambie "DB_HOST" en el archivo .env 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/1231563

Actualización: algunas personas han preguntado por qué funciona esta solución, por lo que he investigado 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/1231563

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), que esencialmente significa que se ejecuta a través de la "Internet local" en su computadora siendo mucho más confiable que el zócalo UNIX en este caso.

Creo que he implementado con éxito 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 punto, la migración debe haber funcionado, porque mis tablas están ahí, pero esto no explica por qué no me funciona ahora.


Paso 1

Encuentre la ruta a su unix_socket, para hacerlo simplemente ejecute netstat -ln | grep mysql netstat -ln | grep mysql

Deberías conseguir algo como esto

unix 2 [ ACC ] STREAM LISTENING 17397 /var/run/mysqld/mysqld.sock

Paso 2

Toma eso y agrégalo a tu param unix_socket

''mysql'' => array( ''driver'' => ''mysql'', ''host'' => ''67.25.71.187'', ''database'' => ''dbname'', ''username'' => ''username'', ''password'' => ''***'', ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ''unix_socket'' => ''/var/run/mysqld/mysqld.sock'' <----- ), ),

Espero eso ayude !!


A partir de Laravel 5, el nombre de usuario y la contraseña de la base de datos van al archivo .env que existe en el directorio del proyecto, por ejemplo

DB_HOST=127.0.0.1 DB_DATABASE=db1 DB_USERNAME=user1 DB_PASSWORD=pass1

Como puede ver, estas variables de entorno están anulando las cadenas ''forjar'' aquí, por lo que cambiarlas no tiene ningún efecto:

''mysql'' => [ ''driver'' => ''mysql'', ''host'' => env(''DB_HOST'', ''localhost''), ''database'' => env(''DB_DATABASE'', ''forge''), ''username'' => env(''DB_USERNAME'', ''forge''), ''password'' => env(''DB_PASSWORD'', ''''), ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ''strict'' => false, ],

Más información está aquí https://mattstauffer.co/blog/laravel-5.0-environment-detection-and-environment-variables


Agregue la ruta mysql.sock en el archivo database.php como en el ejemplo a continuación

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

Ejemplo

''mysql'' => [ ''driver'' => ''mysql'', ''unix_socket'' => ''/Applications/MAMP/tmp/mysql/mysql.sock'', ''host'' => env(''DB_HOST'', ''localhost''), ''port'' => env(''DB_PORT'', ''8889''),


Cuando use un VirtualMachine, asegúrese de ingresar en esa máquina, navegue a la carpeta de su aplicación y llame al comando de migración de php artisan desde allí.


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

En el contexto de Laravel (artesano), es probable que desee utilizar un entorno diferente / correcto. Ej .: php artisan migrate --env=production (o cualquier entorno). Ver here


En el caso de mayo, simplemente había usado

vagrant up

en lugar de

homestead up

Para mi configuración de larvas de forja utilizando homestead. Supongo que esto significaba que el sitio estaba siendo servido, pero el servidor MySQL nunca se inició. Cuando usé el último comando para iniciar mi caja errante, el error desapareció.


En mi caso no tuve ningún problema, solo olvidé iniciar el servicio mysql ...

sudo service mysqld start


En mi caso, estaba ejecutando php artisan migrate en mi terminal mac, cuando necesitaba ssh en vagrant y ejecutarlo desde allí. Espero que ayude a alguien el dolor de cabeza.


Encontré el [PDOException] SQLSTATE[HY000] [2002] No such file or directory error de [PDOException] SQLSTATE[HY000] [2002] No such file or directory 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. Volví a mover mis sitios y los encendí. Pero, no pude cargar mi sitio basado en Laravel 4.2.x debido a la [PDOException] anterior. Por lo tanto, he comprobado php -i | grep pdo 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 está en realidad en /var/run/mysqld/mysqld.sock .

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

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

Entonces, reinicié Apache y comprobé php -i | grep pdo php -i | grep pdo :

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

Eso lo arregló para mí.


Es la respuesta correcta para mí. Deshabilité la opción pdo_mysql.default_socket en mi php.ini y configuré el host de la base de datos en 127.0.0.1 .


Esto me pasó porque MySQL no estaba funcionando. MySQL no se pudo iniciar porque faltaba el directorio /usr/local/etc/my.cnf.d/ .

Esto estaba siendo requerido por mi /usr/local/etc/my.cnf archivo de configuración como una inclusión global ( include /usr/local/etc/my.cnf.d/*.cnf ).

Ejecutar mkdir /usr/local/etc/my.cnf.d , y luego iniciar MySQL, solucionó el problema.


Esto se debe a que PDO trata al host "localhost" especialmente:

Nota: solo Unix: cuando el nombre de host se establece en "localhost", la conexión al servidor se realiza a través de un socket de dominio. Si PDO_MYSQL se compila contra libmysqlclient, la ubicación del archivo de socket se encuentra en la ubicación compilada de libmysqlclient. Si se compila PDO_MYSQL contra mysqlnd, se puede establecer un socket predeterminado a través de la configuración pdo_mysql.default_socket.

(de http://php.net/manual/en/ref.pdo-mysql.connection.php )

Cambiar localhost a 127.0.0.1 "forzará" el uso de TCP.

Nota: mysqli_connect funciona bien con localhost.


Estoy ejecutando MAMP Pro y tuve un problema similar al intentar migrar (crear tablas db). También probé algunas de las sugerencias mencionadas pero no lo hice por mí.

Entonces, simplemente (después de una hora en Google), agregué dos cosas a /config/database.php.

''port'' => ''1234'', ''unix_socket'' => ''/path/to/my/socket/mysqld.sock''

¡Funciona bien ahora!


Funcionó después de cambiar de DB_HOST=localhost a DB_HOST=127.0.0.1 en el archivo .env


Intente conectarse a localhost:

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

Intente conectarse a 127.0.0.1:

SQLSTATE[HY000] [2002] Connection refused

De acuerdo, simplemente comente / elimine la siguiente configuración de my.cnf (en OS X 10.5: /opt/local/etc/mysqlxx/my.cnf ) para obtener:

[mysqld] # skip-networking

Por supuesto, detén e inicia MySQL Server.


La respuesta de @stuyam solucionó el problema "No existe tal archivo o directorio" para mí

Respuesta corta: cambie "host" en el archivo /app/config/database.php de "localhost" a "127.0.0.1"

Pero luego tuve un error de "Conexión rechazada". Si alguien tenía el mismo problema, mi solución para esto era actualizar el archivo app / config / local / database.php para que el puerto sea 8889:

''mysql'' => array( ''driver'' => ''mysql'', ''host'' => ''127.0.0.1'', ''port'' => ''8889'', ''database'' => ''databaseName'', ''username'' => ''root'', ''password'' => ''root'', ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ),


Me encontré con este problema cuando ejecutaba PHPUnit en Elixir / Gulp, y Homestead como mi entorno Vagrant.

En mi caso, edité el archivo .env de DB_HOST=localhost a DB_HOST=192.168.10.10 donde 192.168.10.10 es la IP de mi host Vagrant / Homestead.


Opción de habilitar al usuario de Mamp Permitir acceso de red a MYSQL


Partiendo de la respuesta de @dcarrith ...

En lugar de editar los archivos de configuración, creé un alias en la ubicación que PHP está buscando y que se conecta al mysql.sock real. ( source )

Simplemente ejecute estos dos comandos (no es necesario reiniciar):

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


Revise su puerto con cuidado. En mi caso, fue 8889 y estoy usando 8888. Cambie "DB_HOST" de "localhost" a "127.0.0.1" y viceversa


Si alguien todavía está buscando la respuesta, simplemente revise su archivo .env. Por alguna razón, laravel crea un archivo .env.example, por lo que todas estas respuestas no funcionaron para mí. Solucioné mi problema cambiando de nombre .env.example a .env


Si está utilizando Laravel Homestead, aquí está la configuración

(incluye máquina virtual Vagrant)

.bash-perfil

alias vm="ssh [email protected] -p 2222"

database.php

''mysql'' => [ ''driver'' => ''mysql'', ''host'' => env(''DB_HOST'', ''127.0.0.1''), ''database'' => env(''DB_DATABASE'', ''homestead''), ''username'' => env(''DB_USERNAME'', ''homestead''), ''password'' => env(''DB_PASSWORD'', ''secret''), ''charset'' => ''utf8'', ''collation'' => ''utf8_unicode_ci'', ''prefix'' => '''', ''strict'' => false, ],

Terminal

vm vagrant@homestead:~/Code/projectFolder php artisan migrate:install


Si está utilizando Laravel Homestead, asegúrese de que está llamando a los comandos en el servidor.

homestead ssh

Entonces simplemente cd al directorio correcto y dispara tu comando allí.


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. Entonces acabo de configurar la biblioteca mCrypt para comenzar. Después de eso, cuando estaba trabajando con modelos y DB, recibí el error:

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

El motivo por el que lo encontré es que PHP y MySQL no pueden conectarse por sí mismos. Para solucionar este problema, sigo los siguientes pasos:

  1. Abre un terminal y conéctate al mysql con:

    mysql -u root -p

  2. Le pedirá la contraseña relacionada. Luego, una vez que obtenga el promt 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. Mantener el valor de la última fila:

    /tmp/mysql.sock

  5. En su carpeta de proyectos de laravel, busque el archivo database.php allí es donde configura los parámetros de conexión DB. 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 solo guarda los cambios, y vuelve a cargar la página y ¡debe funcionar! Espero que pueda ser de utilidad!


Todas estas respuestas parecen un trabajo pesado ...

Acabo de crear un archivo .env ; bootstrap/app.php mi archivo bootstrap/app.php , y descomenté la siguiente línea ...

Dotenv::load(__DIR__.''/../'');

Espero que esto ayude a alguien


Tuve problemas para acceder a mi sitio web de drupal y tuve un problema exactamente igual que lo solucioné en menos de 2 horas. Pruebe su línea de comando y reinicie su servidor o servicio mysql. Escriba esto cuando inicie sesión como root o superusuario, - service mysqld restart

Deberia de funcionar. Si no reinicia su servidor web local, - service httpd restart

Eso debería bastar. Espero que funcione para otros entornos también. Aclamaciones.


[Esto no está actualizado, la información de la base de datos se almacena en .env ahora] Una forma más fácil de resolver el problema es mediante la edición de

app/config/local/database.php

:)

Cambia la configuración de la base de datos aquí y debería funcionar