SQLSTATE [HY000] [2002] Brak błędu pliku lub katalogu

14

Wystąpił błąd podczas przetwarzania Twojego żądania

SQLSTATE [HY000] [2002] Brak takiego pliku lub katalogu

Otrzymuję powyższy błąd, proszę o podanie rozwiązania tego problemu.

koder
źródło
Naprawiłem to, zmieniając parametry połączenia, upewnij się, że mysql jest włączony i że wszystkie tabele istnieją w bazie danych.
Touqeer Shafi

Odpowiedzi:

12

Miałem ten sam problem podczas instalacji Magento 2.1.0 z PHP 7.0.13.
Mógłbym rozwiązać ten problem, ustawiając nazwę hosta bazy danych na 127.0.0.1 zamiast localhost .

Jino
źródło
Gdzie to należy zrobić?
joeybab3
inside ./app/etc/env.php
Jino
10

Jeśli serwer wymienione w app/etc/local.xmlto localhosti ten błąd pojawia się w dzienniku błędów Magento, Magento, ale nadal działa ok, następnie mysql został ponownie uruchomiony i gniazdko /tmp/mysql.socklub cokolwiek gniazdo plik zostanie utworzony w my.cnfchwilowo zniknął.

Ponieważ go brakuje, łącznik mysql PDO zgłasza SQLSTATE[HY000] [2002] No such file or directory

Jeśli ciągle pojawia się ten błąd i nie masz dostępu do Magento oprócz strony błędu wyjątku, oznacza to, że mysql całkowicie się zawiesił i potrzebujesz dostawcy usług hostingowych, aby dowiedzieć się, dlaczego i zrestartować mysql.

Fiasco Labs
źródło
6

ustaw nazwę hosta bazy danych na 127.0.0.1 zamiast localhost.

Gość
źródło
2

Może się to również zdarzyć, jeśli twój system plików jest pełny ... df -h 1st ... oczywiście, przeważnie będziesz otrzymywać ostrzeżenia przed tym ...

mysqld nie będzie działał normalnie i będzie w trybie „bezpiecznym”

HTH SNS

Shaheen Shah
źródło
1

Wydaje się, że jest to niewłaściwy problem z wersją PHP, musisz wybrać, którego php ma użyć do uruchomienia polecenia w następujący sposób:

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

PS: Powyższa próbka dotyczy MAC, możesz to zrobić w podobny sposób dla systemu Windows lub Unix.

prashant
źródło
0

Upewnij się, że odpowiednio edytujesz aplikację / etc / local.xml . Jeśli nie masz prefiksów dla swoich tabel, upewnij się, że poprawna linia to:

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

NIE

<table_prefix>{{db_prefix}}</table_prefix>
AlexL
źródło
0

Zwykle jest to spowodowane tym, że inna wersja PHP jest używana przez wiersz poleceń PHP niż serwer WWW. W szczególności mysql.sockmoże być źle skonfigurowany, jeśli tak jest.

Aby ustalić, czy korzystasz z jednej instancji PHP:

  1. Zaloguj się do swojego serwera Magento.
  2. Wpisz następujące polecenie:

    php -i | grep 'php.ini'

Określa ustawienia używane przez interfejs wiersza polecenia PHP (CLI). Uwaga, gdzie php.inisię znajduje.

  1. Jeśli jeszcze tego nie zrobiłeś, skonfiguruj phpinfo.phpna swoim serwerze internetowym.
  2. Porównaj wartość Loaded Configuration File z phpinfo.phpz jednym z php -i.

phpinfo.phppokazuje php.iniplik używany przez twój serwer WWW. Jeśli różni się od tego, co jest w PHP php.ini, musisz dostosować wszystkie ustawienia PHP zarówno dla CLI PHP, jak i serwera WWW.

Aby uzyskać dodatkowe informacje, zapoznaj się z dokumentacją dostarczoną z twoim serwerem internetowym.

gelanivishal
źródło
Może się to zdarzyć - myślę, że mam teraz do czynienia z tym. Ale dlaczego? Jakieś konkretne pomysły na to, co sprawdzić w tych plikach ini?
VladFr
4
Zamiast tego możesz zapewnić uprzejmość tej stronie devdocs.magento.com/guides/v2.0/install-gde/trouble/php/…
Shan
0

Mam kilka wersji PHP dostępnych dla mnie przez powłokę - pisanie php i naciskanie tab pokazuje, o których wie moje autouzupełnianie.

Dla mnie PHP 5.4, 5.5 i 5.6 działały dobrze, ale PHP 7 nie znalazł mysql.sock i zawiesił się przy „SQLSTATE [HY000] [2002] Brak błędu pliku lub katalogu” omówionego w tym pytaniu .

# 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

Aby zobaczyć, gdzie znajduje się gniazdo serwera mysql, użyj tego polecenia:

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

W moim przypadku, gdy Percona Mysql jest zainstalowana w moim błędnym systemie, plik gniazda skarpety zdarzył się tutaj:

/var/run/mysqld/mysqld.sock

(zauważ, że nazywa się to mysqld, a nie po prostu mysql )

Mam do wyboru kilka wersji php, a te polecenia pokazały mi, które miały problemy, a które były w porządku:

Odpowiedzią było dla mnie po prostu włączenie kodu do błędnego skryptu dostawcy w celu utworzenia dowiązania symbolicznego między /tmp/mysql.sock i /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

Po wprowadzeniu nowego dowiązania symbolicznego podany wcześniej skrypt testowy działa doskonale dla wszystkich wersji PHP i mogę używać localhost w kodzie zamiast podawać adres IP 127.0.0.1 .

Martin Francis
źródło
0

Otrzymuję ten sam błąd „SQLSTATE [HY000] [2002] Brak takiego pliku lub katalogu”. I stwierdził, że usługa MySQL została zatrzymana. Uruchomiłem usługę MySQL i działa ona poprawnie.

Pandurang
źródło
0

Musisz zmienić nazwę hosta z localhost na 127.0.0.1 w pliku konfiguracyjnym env w katalogu głównym magento

  • Otwórz aplikację / etc / env.php
  • zmień „host” => „localhost” na „host” => „127.0.0.1”
  • Zapisz plik i spróbuj ponownie
rootleet
źródło