Під час обробки вашого запиту сталася помилка
SQLSTATE [HY000] [2002] Немає такого файлу чи каталогу
Отримання вищевказаної помилки, будь ласка, хтось надасть мені рішення, щоб вирішити цю проблему.
Під час обробки вашого запиту сталася помилка
SQLSTATE [HY000] [2002] Немає такого файлу чи каталогу
Отримання вищевказаної помилки, будь ласка, хтось надасть мені рішення, щоб вирішити цю проблему.
Відповіді:
Якщо ваш сервер у списку app/etc/local.xml
є, localhost
і ця помилка відображається в журналі помилок Magento, але Magento все ще працює в порядку, тоді mysql був перезапущений, а сокет /tmp/mysql.sock
або будь-який інший файл сокета налаштований my.cnf
тимчасово зник.
Оскільки він відсутній, повідомляє роз'єм mysql PDO SQLSTATE[HY000] [2002] No such file or directory
Якщо ви постійно відкидаєте цю помилку і не маєте доступу до Magento, окрім сторінки «Помилка винятку», тоді mysql повністю вийшов з ладу, і вам потрібен ваш хостинг-провайдер, щоб з’ясувати, чому і перезапустити mysql.
У мене була ця сама проблема, і я використовував нижче, щоб вибрати, який php потрібно використовувати. /usr/local/etc/php/7.2/bin/php bin/magento setup:di:compile
Дивіться офіційні документи: SQLSTATE [HY000] [2002] Немає такого файлу чи каталогу
Це, здається, невірна проблема з версією PHP, вам потрібно вибрати, який php потрібно використовувати для запуску команди наступним чином:
/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade
PS: Вище приклад призначений для MAC, ви можете зробити це аналогічно і для Windows, або Unix.
Це зазвичай викликано іншим екземпляром PHP, який використовується командним рядком PHP порівняно з веб-сервером. Зокрема, mysql.sock
може бути неправильно налаштовано, якщо це так.
Щоб визначити, чи використовуєте ви один екземпляр PHP чи ні:
Введіть таку команду:
php -i | grep 'php.ini'
Це визначає параметри, використовувані інтерфейсом командного рядка PHP (CLI). Зверніть увагу, де php.ini
знаходиться.
phpinfo.php
на своєму веб-сервері.phpinfo.php
з однією з php -i
.phpinfo.php
показує php.ini
файл, використовуваний веб-сервером. Якщо це відрізняється від того, що є в PHP php.ini
, ви повинні зробити всі параметри PHP послідовними як для PHP CLI, так і для веб-сервера.
Для отримання додаткової інформації див. Документацію, надану на веб-сервері.
У мене є кілька версій PHP, доступних мені через оболонку - набравши php і натискання вкладки показує, про які мої автозаповнення знає.
Для мене PHP 5.4, 5.5 і 5.6 працювали нормально, але PHP 7 не знайшов mysql.sock, і стався збій із "SQLSTATE [HY000] [2002] Немає такої помилки файлів чи каталогів", обговорюваної в цьому запитанні .
# 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
Щоб побачити, де у вашого сервера mysql є сокет, скористайтеся цією командою:
cat /etc/mysql/my.cnf | grep socket
У моєму випадку, коли Percona Mysql, встановлений у моїй бродячій системі, тут трапився файл розетки шкарпеток:
/var/run/mysqld/mysqld.sock
(зауважте, що його називають mysqld не просто mysql )
У мене є кілька версій php, з яких можна вибрати, і ці команди показали мені, які з них мали проблеми, а які - добре:
Відповідь для мене полягала в тому, щоб просто включити код у сценарій бродячого оператора, щоб створити симпосилання між /tmp/mysql.sock та /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
З новим символьним посиланням тестовий скрипт, наведений до цього часу, відмінно працює для всіх версій PHP, і я можу використовувати localhost у своєму коді, замість того, щоб вводити IP-адресу 127.0.0.1 .