При обработке вашего запроса произошла ошибка
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, по сравнению с веб-сервером. В частности, mysql.sock
может быть неправильно настроен, если это так.
Чтобы определить, используете ли вы один экземпляр PHP:
Введите следующую команду:
php -i | grep 'php.ini'
Это определяет настройки, используемые интерфейсом командной строки PHP (CLI). Обратите внимание, где php.ini
находится.
phpinfo.php
на своем веб-сервере.phpinfo.php
с одной из php -i
.phpinfo.php
показывает php.ini
файл, используемый вашим веб-сервером. Если это отличается от того, что в PHPphp.ini
, вы должны сделать все настройки PHP согласованными как для CLI PHP, так и для веб-сервера.
Для получения дополнительной информации обратитесь к документации, прилагаемой к вашему веб-серверу.
У меня есть несколько версий 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
(обратите внимание , что это называется туздО не просто MySQL )
У меня есть несколько версий php на выбор, и эти команды показали мне, какие из них были проблемы, а какие были в порядке:
Для меня ответом было просто включить код в сценарий поставщика vagrant для создания символической ссылки между /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 .
Кажется, это неправильная проблема с версией PHP, вам нужно выбрать, какой php использовать для запуска команды, следующим образом:
/Applications/MAMP/bin/php/php7.1.20/bin/php bin/magento setup:upgrade
PS: Пример выше для MAC, вы можете сделать это аналогичным образом для Windows или Unix.