SQLSTATE [HY000] [2002] No existe tal archivo o error de directorio

14

Se produjo un error al procesar su solicitud.

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

Obteniendo el error anterior, por favor alguien me brinde una solución para resolver esto.

descifrador
fuente
Lo arreglé cambiando la cadena de conexión, asegúrese de que su mysql esté encendido y que todas las tablas existan en la base de datos.
Touqeer Shafi

Respuestas:

12

Tuve el mismo problema al instalar Magento 2.1.0 con PHP 7.0.13.
Podría resolver este problema estableciendo el nombre de host de la base de datos como 127.0.0.1 en lugar de localhost .

Jino
fuente
¿Dónde se debe hacer esto?
joeybab3
inside ./app/etc/env.php
Jino
10

Si su servidor en la lista app/etc/local.xmles localhosty este error aparece en el registro de errores de Magento, pero Magento todavía se está ejecutando bien, entonces mysql se reinició y el socket /tmp/mysql.socko cualquier archivo de socket configurado my.cnftemporalmente desapareció.

Debido a que falta, el conector PDO mysql informa SQLSTATE[HY000] [2002] No such file or directory

Si recibe continuamente este error y no tiene acceso a Magento aparte de la página Error de excepción, entonces mysql se ha bloqueado por completo y necesita su proveedor de alojamiento para averiguar por qué y reiniciar mysql.

Laboratorios Fiasco
fuente
6

establezca el nombre de host de la base de datos como 127.0.0.1 en lugar de localhost.

invitado
fuente
2

Esto también puede suceder si su sistema de archivos está lleno ... df -h 1er ... por supuesto, la mayoría de las veces debería recibir alertas antes de eso ...

mysqld no se ejecutará normalmente y estaría en modo "seguro"

HTH SNS

shaheen shah
fuente
0

Asegúrese de editar su aplicación / etc / local.xml correctamente. Si no tiene prefijos para sus tablas, asegúrese de que la línea correcta sea:

<table_prefix><![CDATA[]]></table_prefix>

NO

<table_prefix>{{db_prefix}}</table_prefix>
AlexL
fuente
0

Esto es comúnmente causado por una instancia diferente de PHP utilizada por la línea de comando PHP en comparación con el servidor web. En particular, mysql.sockpodría estar mal configurado si este es el caso.

Para determinar si está utilizando o no una instancia de PHP:

  1. Inicie sesión en su servidor Magento.
  2. Ingrese el siguiente comando:

    php -i | grep 'php.ini'

Esto determina la configuración utilizada por la interfaz de línea de comandos (CLI) de PHP. Tenga en cuenta dónde php.inise encuentra.

  1. Si aún no lo ha hecho, configure un phpinfo.phpen su servidor web.
  2. Compare el valor de Loaded Configuration File from phpinfo.phpcon el de php -i.

phpinfo.phpmuestra el php.iniarchivo utilizado por su servidor web. Si es diferente de lo que hay en PHP php.ini, debe hacer que todas las configuraciones de PHP sean consistentes tanto para la CLI de PHP como para el servidor web.

Para detalles adicionales, consulte la documentación provista con su servidor web.

gelanivishal
fuente
Esto puede suceder, creo que estoy enfrentando esto ahora mismo. ¿Pero por qué? ¿Alguna idea específica sobre qué verificar en estos archivos ini?
VladFr
44
Más bien, puede proporcionar alguna cortesía a esta página devdocs.magento.com/guides/v2.0/install-gde/trouble/php/…
Shan
0

Tengo varias versiones de PHP disponibles para mí a través del shell: al escribir php y presionar la tecla, se muestran cuáles conoce mi autocompletado.

Para mí, PHP 5.4, 5.5 y 5.6 funcionaban bien, pero PHP 7 no estaba encontrando el mysql.sock, y se estaba bloqueando con el "SQLSTATE [HY000] [2002] No hay tal archivo o error de directorio" discutido en esta pregunta .

# Prints [ok]
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-5.6.20

# Prints [error] and shows a warning
echo "<?php print(new mysqli('localhost', 'root', 'root', 'mysql') ? '[ok]' : '[error]').PHP_EOL; ?>" | php-7.0.8

Para ver dónde tiene su servidor mysql, use este comando:

cat /etc/mysql/my.cnf | grep socket

En mi caso, con Percona Mysql instalado en mi sistema vagabundo, el archivo de socket de calcetín vivió aquí:

/var/run/mysqld/mysqld.sock

(tenga en cuenta que se llama mysqld no simplemente mysql )

Tengo varias versiones de php para elegir y estos comandos me mostraron cuáles tenían problemas y cuáles estaban bien:

La respuesta para mí fue simplemente incluir código en el script de aprovisionamiento vagabundo para crear un enlace simbólico entre /tmp/mysql.sock y /var/run/mysqld/mysqld.sock

if [ ! -L /tmp/mysql.sock ]; then
    echo "Creating symbolic link for php 7 to connect to mysql.sock"
    ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
fi

Con el nuevo enlace simbólico en su lugar, el script de prueba proporcionado anteriormente funciona perfectamente para todas las versiones de PHP y puedo usar localhost en mi código en lugar de tener que dar la dirección IP 127.0.0.1 .

Martin Francis
fuente
0

Me sale el mismo error "SQLSTATE [HY000] [2002] No existe tal archivo o directorio". Y descubrió que el servicio MySQL se detuvo. Comencé mi servicio MySQL y está funcionando bien.

Pandurang
fuente
0

Esto parece ser un problema de versión de PHP incorrecto, debe seleccionar qué php debe usar para ejecutar el comando de la siguiente manera:

/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade

PD: el ejemplo anterior es para MAC, también puede hacerlo de manera similar para Windows o Unix.

prashant
fuente