mysqli_real_connect (): (HY000 / 2002): Немає такого файлу або каталогу


78
mysqli_real_connect(): (HY000/2002): No such file or directory

Помилка PhpMyAdmin на MacOS. Я хочу відповісти. Я справді не уявляю, що мені потрібно зробити, щоб це вирішити.


Ви можете дати трохи більше інформації?
Кевін Уолліс,

Відповіді:


107

змінити localhost на 127.0.0.1 у /etc/phpmyadmin/config.inc.php

$cfg['Servers'][$i]['host'] = '127.0.0.1';

Причиною цього є те, що pma намагається підключитися до mysql.socket, якщо ви використовуєте localhost. Якщо ви використовуєте 127.0.0.1, PMA встановлює TCP-з'єднання, яке має працювати.


6
Я був радий знайти цю відповідь, щоб налагодити роботу, але в чому справжнє виправлення? Це обхідний шлях. Ви повинні вміти користуватися localhost.
Нільпо

2
Можна подумати, але, мабуть, ні. Щодо налаштування "тип підключення": "Не застосовується з версії 4.7.0: Цей параметр більше не використовується з 4.7.0, оскільки MySQL визначає тип підключення на основі хоста, тому це може призвести до несподіваних результатів." Посилання: docs.phpmyadmin.net/en/latest/config.html
imclean

"Справжнє виправлення" полягає в тому, щоб прочитати та зрозуміти документацію MySQL, потім відредагувати файли конфігурації та мати систему, де ви знаєте, що відбувається, замість того, щоб просто слідувати деяким порадам і забути все, як тільки це запрацює. Якщо ви хочете використовувати, localhostвам потрібно налаштувати MySQL для прослуховування на сокеті замість TCP / IP. Я завжди рекомендував би це робити, коли ваша база даних знаходиться на одній машині.
Бахсау,

велике спасибі людино. Я деякий час застряг у цьому. Не знав, проблема така маленька.
ашукід

21

Я пробую це раніше

cd /opt/lampp/phpmyadmin

Тоді

gedit config.inc.php

Знайдіть це

$cfg['Servers'][$i]['host'] = 

Якщо є, localhostзмініть його на127.0.0.1

Примітка: якщо є '//' видалити // раніше $cfg['Servers'][$i]['host']

Я перевірив ще раз http://localhost/phpmyadmin/

Мисклі сказав:

"phpMyAdmin намагався підключитися до сервера MySQL, і сервер відхилив підключення. Вам слід перевірити хост, ім'я користувача та пароль у вашій конфігурації та переконатися, що вони відповідають інформації, наданій адміністратором сервера MySQL."

Я знову відкриваю config.inc.phpі знайшов

$cfg['Servers'][$i]['password'] =

Заповніть пароль своїм паролем

У мене це спрацювало. Це може працювати і для вас.


заощадите мені багато часу
dadan

1
Станом на жовтень 2018 року шлях MAMP повинен бути /Applications/MAMP/bin/phpMyAdmin/config.inc.php . Це спрацювало як шарм :-)
ImFarhad

20

Знайдіть config.sample.inc.php

Зміна

$cfg['Servers'][$i]['host'] = 'localhost';

в

$cfg['Servers'][$i]['host'] = '127.0.0.1';

Зберегти.

Потім перейменуйте файл і видаліть зразок з імені.


15

Можливо, ваш SQL-сервер зупинено

sudo /etc/init.d/mysql start

або

sudo service mysqld start

і використовуйте service mysql statusдля перевірки статусу

РЕДАКТУВАТИ додавання з коментарів:

Використання:

sudo systemctl enable mysql 

продовжувати працювати MySQL.


2
перезапуск служби mysqld
GAV

Це спрацювало для мене, але велике питання, чому це зупинилося? Тому що я отримую це дуже часто.
COS

@Komi використовують sudo systemctl enable mysqlдля продовження роботи MySQL. Вибачте за пізню відповідь. Я пропустив це повністю.
Абдулла Нілам

10

mysqli_connect (): (HY000 / 2002): Немає такого файлу чи каталогу

Передумови:

Мені просто хотіли запустити деякі тести PHPUnit на своєму Mac, використовуючи Terminal. Деякі класи, які я хочу протестувати, мали підключати MySQL DB, яку створив і керував PHPMyAdmin, а веб-програма, з якою я працював, працювала нормально в localhost. Отже, коли я запустив те тести, на моєму терміналі з’явилася така помилка:

mysqli_connect(): (HY000/2002): No such file or directory

Рішення:

Отже, з-за свербіння мені довелося його вирішити та запустити тест, я шукав у кількох потоках запитань SO та пробував. І поєднання змін спрацювало для мене.

  1. Знайдіть свій config.inc.phpфайл, який стосується PHPMyAdmin.
  2. Знайдіть рядок, $cfg['Servers'][$i]['host']здебільшого цей рядок міг бути прокоментований за замовчуванням, якщо так, то прокоментуйте його.
  3. І замініть цей рядок наступним:

$cfg['Servers'][$i]['host'] = '127.0.0.1';

  1. Збережіть його та перезапустіть базу даних MySQL з вашої панелі керування XAMPP (manager-osx).
  2. Змініть $hostзначення параметра в mysqli_connect()методі на таке:

$_connection = mysqli_connect(**"localhost: 3306"**, $_mysql_username, $_mysql_password, $_database);

Примітка: Це 3306мій номер порту MySQL, який є типовим за замовчуванням. Вам слід краще перевірити фактичний номер порту MySQL, перш ніж виконувати ці дії.

І це все. Для мене працювали лише ці набори кроків і нічого іншого. Я провів свої модульні тести, і він працює нормально, і дані БД також були оновлені належним чином відповідно до тестів.

Чому це працює:

Найближча причина, яку я міг би виявити, полягає в тому, що вона працює, оскільки іноді mysqli_connectметод вимагає робочого сокета (IP-адреса хосту БД разом з номером порту) бази даних. Отже, якщо ви прокоментували $cfg['Servers'][$i]['host'] = '127.0.0.1';рядок або встановили значення "localhost" як значення в ньому, він ігнорує номер порту. Але якщо ви хочете використовувати сокет, тоді вам доведеться використовувати '127.0.0.1' або справжнє ім'я хосту. (для мене це видається незалежно від номера порту за замовчуванням, який ми дійсно маємо, ми повинні виконати вищевказані кроки.) Прочитайте наступне посилання PHPMyAdmin для отримання додаткової інформації.

Сподіваюся, це може бути корисним для когось іншого.

На здоров’я!


7

Я вирішив проблему сьогодні, виконавши наведені нижче дії:

  1. Якщо config.inc.php не існує в каталозі phpMyadmin, скопіюйте config.sample.inc.php в config.inc.php.

  2. Додайте сокет до /* Server parameters */

    $cfg['Servers'][$i]['socket'] = '/tmp/mysql.sock';
    
  3. Збережіть файл і отримайте доступ до phpmyadmin через url.

Якщо ви використовуєте mysql 8.0.12, вам слід використовувати застаріле шифрування пароля, оскільки сильне шифрування не підтримується php-клієнтом. введіть тут опис зображення


Безумовно, найкраща відповідь для користувачів macOS!
Sebj,

Під час використання php та httpd, встановлених з HOMEBREW, мені довелося використовувати застаріле шифрування пароля, щоб воно працювало, до того, як використовуючи рідний PHP та httpd від Macos Catalina, мені не потрібно було його змінювати, тому, коли я перевстановив PHP і HTTPD з домашньої мови, я втратив зв’язок ... Дякую за відповідь
Султанос

5

Перш за все, переконайтеся, що служба MySQL працює:

ps elf|grep mysql

ви побачите такий вивід, якщо працює:

4 S root      9642     1  0  80   0 -  2859 do_wai 23:08 pts/0    00:00:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/tomcat-machine.local.pid
4 S mysql     9716  9642  0  80   0 - 200986 poll_s 23:08 pts/0   00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tomcat-machine.local.err --pid-file=/var/lib/mysql/tomcat-machine.local.pid

потім змініть localhost на 127.0.0.1 у config.inc.php

$cfg['Servers'][$i]['host'] = '127.0.0.1';

Пароль за замовчуванням для користувача "root" порожній "", нічого не вводьте для пароля

Якщо він не дозволяє порожній пароль, вам потрібно знову відредагувати config.inc.php та змінити:

$cfg['Servers'][$i]['AllowNoPassword'] = true;

Проблема полягає в поєднанні налаштувань конфігурації та MySQL, який не працює. Саме це допомогло мені виправити цю помилку.


1

Я зіткнувся з цією проблемою на CentOS .

Спочатку я пробую це

sudo service mysql restart

Потім з’являється помилка

Redirecting to /bin/systemctl restart mysql.service
Failed to restart mysql.service: Unit not found.

Тоді я знайшов це

Накажіть це вирішити мою проблему

systemctl start mariadb.service

1

Якщо ви використовуєте archlinux або Ubuntu, просто введіть команди нижче:

cd /opt/lampp/phpmyadmin

тоді

sudo gedit config.inc.php

Потім, коли ви отримуєте доступ до файлу, шукайте скрипти нижче,

//$cfg['Servers'][$i]['host'] ='localhost'

видаліть '//' так, щоб він залишався, як показано нижче:

$cfg['Servers'][$i]['host'] ='localhost'

Потім змініть " localhost " на " 127.0.0.1 ", і сценарій повинен перетворитися, як показано нижче:

$cfg['Servers'][$i]['host'] ='127.0.0.1'

Поверніться до браузера та введіть http://127.0.0.1/phpmyadmin/

Якщо вона все ще відмовляє

Вам слід перевірити хост, ім’я користувача та пароль у вашій конфігурації та переконатися, що вони відповідають інформації, наданій адміністратором сервера MySQL.

тоді поверніться до того самого файлу config.inc.php, який ви редагували, і виконайте наступне:

cd /opt/lampp/phpmyadmin

тоді

sudo gedit config.inc.php

шукайте сценарій нижче

$cfg['Servers'][$i]['password'] =''

Заповніть пароль своїм паролем користувача

$cfg['Servers'][$i]['password'] ='your_password'

І це має спрацювати.


0

Якщо ваш веб-сайт працював нормально і тепер несподівана ПОМИЛКА :(HY000/2002): No such file or directory

Тоді вам НЕ ЗМІНЮЙТЕ будь-який конфігураційний файл!

Спочатку перевірте файл error.log сервера , для Nginx він знаходиться:

/var/log/nginx/error.log

Або для Apache спробуйте:

/var/log/apache2/error_log

У моєму випадку я міг побачити PHP Фатальну помилку: ЗАРАЗ ПАМ'ЯТІ в error.log для nginx.

Рішення: додайте більше оперативної пам'яті на сервер.


Я намагався перезавантажити веб-сервер спочатку перед оновленням / додаванням оперативної пам'яті. Тоді я позбувсяERROR (HY000/2002) but got some ERROR 50X: Connection Error...

На цьому етапі я додав 2 ГБ оперативної пам'яті, перезавантажив веб-сервер і все працювало нормально!

Коли веб-сервер вийшов, я помітив, що понад 200 завдань cron застрягли через помилку циклу в 1 PHP-сценарії.

Тож перевірте, який сценарій забирає пам’ять.


0

Якщо ви використовували Mac OS і Brew, спробуйте:

mkdir /usr/local/etc/my.cnf.d

0

У мене була та сама проблема. У моєму /etc/mysql/my.cnfне було шляху більше до mysqld.sockвизначеного. Тому я розпочав пошук, щоб знайти його за допомогою: find / -type s | grep mysqld.sockале його не вдалося знайти. Я перевстановив mysql за допомогою:apt install mysql-server-5.7 (будь ласка, перевірте, перш ніж запускати поточну версію sql-сервера).

Це вирішило мою проблему.


0
mysqli_connect(): (HY000/2002): No such file or directory

Я стикався з такою ж проблемою на debian9 VM, я намагався перезапустити MySQL, але це не вирішило проблему, після цього я збільшив оперативну пам'ять (мене зменшили), і це спрацювало.


0

Якщо ви використовуєте SELinux, перевірте це.

У мене була та сама проблема. Я запускав CentOS 8 із застосуванням SELinux і отримував помилку, згадану у питанні (mysqli_real_connect(): (HY000/2002): No such file or directory ), незважаючи на те, що всі конфігурації були виправлені правильно. Пізніше я вийшов із проблеми, дозволивши з'єднання MySQL через SELinux.

Перевірте стан SELinux за допомогою цієї команди:

sestatus

Дозволити Apache підключати базу даних через SELinux

setsebool httpd_can_network_connect_db 1

-PПараметр Use робить зміну постійною. Без цієї опції логічне значення буде скинуто до 0 при перезавантаженні.

setsebool -P httpd_can_network_connect_db 1



-1

Якщо наведені вище рішення не працюють, спробуйте змінити порт за замовчуванням з 3306 на інший (тобто 3307)


-8

Вам просто потрібно перейменувати ib_logfile0 та ib_logfile1 як ib_logfile_0 та ib_logfile_1. Тоді ваша проблема буде вирішена.


Це абсолютно не пов'язано.
Павел Томкіл,

Ваша відповідь не пов'язана з питанням. Перейменування файлів журналів не допоможе mysqli знайти сокет або підключення до сервера MySQL. Якщо ми неправильно зрозуміли вашу відповідь, можливо, вам доведеться її оновити, інакше було б краще видалити цю відповідь. Будь ласка, прочитайте посібник із відповіді .
AnthonyB
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.