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.


6

встановіть ім'я хоста бази даних як 127.0.0.1 замість localhost.


2

Це також може статися, якщо ур файлова система повна ... df -h 1-е ... звичайно, здебільшого у шуд отримують сповіщення перед цим ...

mysqld звичайно не працює нормально, і перебуває в "безпечному" режимі

HTH SNS



1

Це, здається, невірна проблема з версією PHP, вам потрібно вибрати, який php потрібно використовувати для запуску команди наступним чином:

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

PS: Вище приклад призначений для MAC, ви можете зробити це аналогічно і для Windows, або Unix.


0

Переконайтесь, що ви редагували програму / etc / local.xml належним чином. Якщо у вас немає префіксів для ваших таблиць, переконайтеся, що правильний рядок:

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

НЕ

<table_prefix>{{db_prefix}}</table_prefix>

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файл, використовуваний веб-сервером. Якщо це відрізняється від того, що є в PHP php.ini, ви повинні зробити всі параметри PHP послідовними як для PHP CLI, так і для веб-сервера.

Для отримання додаткової інформації див. Документацію, надану на веб-сервері.


Це може статися - я думаю, я зараз зіткнувся з цим. Але чому? Якісь конкретні ідеї щодо того, що потрібно перевірити в цих файлах ini?
ВладФр

4
Швидше Ви можете надати люб’язність цій сторінці devdocs.magento.com/guides/v2.0/install-gde/trouble/php/…
Shan

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

(зауважте, що його називають 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 .


0

Я отримую ту ж помилку "SQLSTATE [HY000] [2002] Немає такого файлу чи каталогу". І виявив, що сервіс MySQL був зупинений. Я запустив свою службу MySQL та її роботу.


0

Ви повинні змінити ім'я хоста з localhost на 127.0.0.1 у файлі конфігурації env у вашому кореневому каталозі magento

  • Відкрити додаток / etc / env.php
  • змінити 'host' => 'localhost' на 'host' => '127.0.0.1'
  • Збережіть файл та повторіть спробу
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.