SQLSTATE [HY000] [2002] Нет такой ошибки файла или каталога

14

При обработке вашего запроса произошла ошибка

SQLSTATE [HY000] [2002] Нет такого файла или каталога

Получив вышеуказанную ошибку, пожалуйста, кто-нибудь предоставит мне решение этой проблемы.

кодировщик
источник
Я исправил это, изменив строку подключения, убедитесь, что ваш mysql включен и у вас есть все таблицы, существующие в базе данных.
Touqeer Shafi

Ответы:

12

У меня была такая же проблема при установке Magento 2.1.0 с PHP 7.0.13.
Я мог бы решить эту проблему, установив имя хоста базы данных как 127.0.0.1 вместо localhost .

Джино
источник
Где это должно быть сделано?
joeybab3
внутри ./app/etc/env.php
Джино
10

Если ваш сервер в списке 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.

Fiasco Labs
источник
6

установите имя хоста базы данных как 127.0.0.1 вместо localhost.

гость
источник
2

Это также может произойти, если ваша файловая система заполнена ... df -h 1st ... ofcourse, в основном вы должны получать уведомления до этого ...

MySQL не будет работать нормально, и будет в "безопасном" режиме

HTH SNS

Шахин Шах
источник
0

Убедитесь, что вы правильно отредактировали ваше приложение / etc / local.xml . Если у вас нет префиксов для ваших таблиц, убедитесь, что правильная строка:

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

НЕ

<table_prefix>{{db_prefix}}</table_prefix>
AlexL
источник
0

Это обычно вызывается другим экземпляром PHP, используемым командной строкой PHP, по сравнению с веб-сервером. В частности, mysql.sockможет быть неправильно настроен, если это так.

Чтобы определить, используете ли вы один экземпляр PHP:

  1. Войдите на свой сервер Magento.
  2. Введите следующую команду:

    php -i | grep 'php.ini'

Это определяет настройки, используемые интерфейсом командной строки PHP (CLI). Обратите внимание, где php.iniнаходится.

  1. Если вы еще этого не сделали, настройте phpinfo.phpна своем веб-сервере.
  2. Сравните значение загруженного файла конфигурации из phpinfo.phpс одной из php -i.

phpinfo.phpпоказывает php.iniфайл, используемый вашим веб-сервером. Если это отличается от того, что в PHPphp.ini , вы должны сделать все настройки PHP согласованными как для CLI PHP, так и для веб-сервера.

Для получения дополнительной информации обратитесь к документации, прилагаемой к вашему веб-серверу.

gelanivishal
источник
Это может случиться - я думаю, что сталкиваюсь с этим прямо сейчас. Но почему? Любые конкретные идеи о том, что проверить в этих файлах INI?
ВладФр
4
Скорее, вы можете оказать некоторую вежливость этой странице devdocs.magento.com/guides/v2.0/install-gde/trouble/php/…
Шань,
0

У меня есть несколько версий 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 .

Мартин Фрэнсис
источник
0

Я получаю ту же ошибку "SQLSTATE [HY000] [2002] Нет такого файла или каталога". И обнаружил, что служба MySQL была остановлена. Я запустил свой сервис MySQL, и он работает нормально.

Pandurang
источник
0

Кажется, это неправильная проблема с версией PHP, вам нужно выбрать, какой php использовать для запуска команды, следующим образом:

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

PS: Пример выше для MAC, вы можете сделать это аналогичным образом для Windows или Unix.

Prashant
источник