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.
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.
Odpowiedzi:
Jeśli serwer wymienione w app/etc/local.xml
to localhost
i 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.sock
lub cokolwiek gniazdo plik zostanie utworzony w my.cnf
chwilowo 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.
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
Miałem ten sam problem i użyłem poniżej, aby wybrać, którego php ma użyć. /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
Zobacz oficjalne dokumenty: SQLSTATE [HY000] [2002] Brak takiego pliku lub katalogu
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.
Zwykle jest to spowodowane tym, że inna wersja PHP jest używana przez wiersz poleceń PHP niż serwer WWW. W szczególności mysql.sock
może być źle skonfigurowany, jeśli tak jest.
Aby ustalić, czy korzystasz z jednej instancji PHP:
Wpisz następujące polecenie:
php -i | grep 'php.ini'
Określa ustawienia używane przez interfejs wiersza polecenia PHP (CLI). Uwaga, gdzie php.ini
się znajduje.
phpinfo.php
na swoim serwerze internetowym.phpinfo.php
z jednym z php -i
.phpinfo.php
pokazuje php.ini
plik 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.
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 .