SQLSTATE [HY000] [2002] Nenhum erro de arquivo ou diretório

14

Ocorreu um erro ao processar sua solicitação

SQLSTATE [HY000] [2002] Esse arquivo ou diretório não existe

Obtendo o erro acima, por favor, alguém me forneça solução para resolver isso.

codificador
fonte
Eu consertei isso alterando a cadeia de conexão, verifique se o mysql está ativado e se todas as tabelas existem no banco de dados.
Touqeer Shafi

Respostas:

12

Eu tive o mesmo problema ao instalar o Magento 2.1.0 com PHP 7.0.13.
Eu poderia resolver esse problema definindo o nome do host do banco de dados como 127.0.0.1 em vez de localhost .

Jino
fonte
Onde isso deve ser feito?
precisa saber é o seguinte
./app/etc/env.php dentro
Jino
10

Se o seu servidor listado app/etc/local.xmlestiver em localhoste esse erro aparecer no log de erros do Magento, mas o Magento ainda estiver funcionando, o mysql foi reiniciado e o soquete /tmp/mysql.sockou qualquer arquivo de soquete configurado my.cnftemporariamente desapareceu.

Como está faltando, o conector mysql do PDO relata SQLSTATE[HY000] [2002] No such file or directory

Se você está recebendo esse erro continuamente e não tem acesso ao Magento além da página Erro de exceção, o mysql travou completamente e você precisa do seu provedor de hospedagem para descobrir o porquê e reiniciar o mysql.

Fiasco Labs
fonte
6

defina o nome do host do banco de dados como 127.0.0.1 em vez de localhost.

hóspede
fonte
2

Isso também pode acontecer se o sistema de arquivos estiver cheio ...

o mysqld não estará funcionando normalmente e estaria no modo "seguro"

HTH SNS

shaheen shah
fonte
0

Certifique-se de editar seu aplicativo / etc / local.xml corretamente. Se você não possui prefixos para suas tabelas, verifique se a linha correta é:

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

NÃO

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

Isso geralmente é causado por uma instância diferente do PHP sendo usada pela linha de comando do PHP em comparação ao servidor da web. Em particular, mysql.sockpode ser configurado incorretamente, se este for o caso.

Para determinar se você está usando ou não uma instância do PHP:

  1. Faça login no seu servidor Magento.
  2. Digite o seguinte comando:

    php -i | grep 'php.ini'

Isso determina as configurações usadas pela CLI (interface da linha de comandos) do PHP. Observe onde php.iniestá localizado.

  1. Se você ainda não o fez, configure um phpinfo.phpno seu servidor web.
  2. Compare o valor de Loaded arquivo de configuração do phpinfo.phpcom o de php -i.

phpinfo.phpmostra o php.iniarquivo usado pelo seu servidor web. Se for diferente do que está no PHP php.ini, você deve tornar todas as configurações de PHP consistentes para a CLI do PHP e o servidor da web.

Para detalhes adicionais, consulte a documentação fornecida com o servidor da web.

gelanivishal
fonte
Isso pode acontecer - acho que estou enfrentando isso agora. Mas por que? Alguma idéia específica sobre o que fazer check-in nesses arquivos ini?
precisa saber é o seguinte
4
Em vez disso você pode fornecer um pouco de cortesia a esta página devdocs.magento.com/guides/v2.0/install-gde/trouble/php/...
Shan
0

Eu tenho várias versões do PHP disponíveis para mim através do shell - digitando php e pressionando tab mostra quais os que meu preenchimento automático conhece.

Para mim, o PHP 5.4, 5.5 e 5.6 estavam funcionando bem, mas o PHP 7 não estava encontrando o mysql.sock e estava travando com o "SQLSTATE [HY000] [2002] Nenhum erro de arquivo ou diretório" discutido nesta pergunta .

# 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 onde seu servidor mysql possui seu soquete, use este comando:

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

No meu caso, com o Percona Mysql instalado no meu sistema vagrant, o arquivo de soquete de meia estava aqui:

/var/run/mysqld/mysqld.sock

(observe que é chamado mysqld e não simplesmente mysql )

Eu tenho várias versões do php para escolher e esses comandos me mostraram quais tinham problemas e quais eram bons:

A resposta para mim foi simplesmente incluir o código no script do provedor vagrant para criar um link simbólico entre /tmp/mysql.sock e /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

Com o novo link simbólico, o script de teste fornecido anteriormente agora funciona perfeitamente para todas as versões do PHP e eu posso usar o host local no meu código, em vez de precisar fornecer o endereço IP 127.0.0.1 .

Martin Francis
fonte
0

Eu recebo o mesmo erro "SQLSTATE [HY000] [2002] Esse arquivo ou diretório não existe". E descobriu que o serviço MySQL estava parado. Comecei meu serviço MySQL e está funcionando bem.

Pandurang
fonte
0

Parece estar com problema de versão PHP errado, você precisa selecionar qual php deve ser usado para executar o comando da seguinte maneira:

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

PS: A amostra acima é para MAC, você pode fazê-lo de maneira semelhante para Windows ou Unix também.

prashant
fonte