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.


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 .


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.


6

ustaw nazwę hosta bazy danych na 127.0.0.1 zamiast localhost.


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



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.


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>

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.


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 .


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.