Не вдається підключитися до MySQL за допомогою "localhost", але за допомогою "127.0.0.1" це нормально?


12

Мій файл / etc / hosts виглядає так:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Під час створення сервера я виявив, що, хоча я міг успішно пінг localhost, у певних файлах конфігурації для таких служб, як Postfix та Apache та Dovecot, мені потрібно було вказати 127.0.0.1замість localhostтого, щоб змусити їх працювати.

Мені також потрібно було змінити конфігураційні файли певних веб-сайтів, керованих базами даних, які використовувались localhostдля підключення до MySQL.

Я спробував різні модифікації hostsфайлу, але нічого, що я намагався до цього часу, не допомогло.

Сервер працює під управлінням Ubuntu 12.04.02 LTS. У ньому не встановлено selinux, і зазначена вище ситуація залишається навіть після встановлення політик за замовчуванням IPtables для їх прийняття та очищення.

Відповіді:


15

Одне, що ви можете перевірити, - це (що вимагає увійти до консолі MySQL) - перевірте, чи є у вас дозволи на вхід rootчерез localhost.

mysql -h 127.0.0.1 -u root -p

- Після успішного входу -

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

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


У мене таке відчуття, що ти на правильному шляху. Я зробив це, і я можу бачити, що хоча root і пара інших користувачів були створені для localhost, ті, що створені панеллю управління хостингом для користувачів, призначені для всіх 127.0.0.1(крім одного, який є %). Я думаю, що це, ймовірно, виявляє достатньо для мене виправлення, тому я, швидше за все, прийму вашу відповідь.
Пітер Сніг

Дякую за допомогу! Я хотів би додати, що після оновлення таблиці mysql.user потрібен перезапуск сервера mysql, щоб зміни вплинули на вплив.
lackovic10

Хоча це прийнято, для mysql це звичайно (ніколи?) Питання. Див. Натомість відповідь EEAA (mysql трактує localhostяк socketзамість TCP).
ToolmakerSteve

8

Більшість клієнтів MySQL дивні в тому, що якщо ви вказали хост як localhost, вони його псевдонімують до з'єднання сокет замість з'єднання TCP. Ваші параметри полягають у тому, щоб або дотримуватися, 127.0.0.1або, якщо клієнт підтримує це (як це робиться у файлі mysql CLI, який використовується з --protocolпрапором), змусити його використовувати TCP замість unix-сокета.


Дякуємо EEAA Проблема полягає в тому, що такі речі, як інсталятор Joomla, виходять з ладу. Якщо під час встановлення ви вказуєте 127.0.0.1замість localhostполя імені хоста, це призводить до того, що шляхи встановлення будуть заплутані, що дає мені інші помилки, але вказівка ​​localhost не може підключити базу даних! Що спричинило цю ситуацію? Чому я це маю?
Пітер Сніг

3
@PeterSnow Налаштуйте розетку домену Unix у конфігурації MySQL.
Майкл Хемптон

Дякую @MichaelHampton я шукав останні півгодини і не можу знайти, як це налаштувати. Ви можете вказати мені на статтю чи дати мені будь-яку ідею? У мене є socket = /var/run/mysqld/mysqld.sockв my.cnfі файл існуючого, що належить MySQL з правами 777. Спасибі.
Пітер Сніг

@PeterSnow Ви перезапустили mysqld після внесення цієї зміни?
EEAA

В даний час я намагаюся використовувати його через сценарій встановлення Joomla. Сторінка http запитує ім'я хоста. Якщо я виберу 127.0.0.1це, він працює (але сценарій використовує запис пізніше і не працює, тому що він очікує дозволеного імені, як localhost), але якщо я використовую localhost, підключення, для створення бази даних, не вдасться.
Пітер Сніг


1

Ви можете перевірити такий дозвіл:

[learner@localhost ~]$ sudo netstat -npa | grep mysqld  
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      6284/mysqld         
unix  2      [ ACC ]     STREAM     LISTENING     233040 6284/mysqld         /var/lib/mysql/mysql.sock

Якщо це прослуховування 0 0,0.0.0:*, це означає, що кожен може отримати доступ до цього mysql.

ви можете змінити прив’язку для цього у файлі my.conf. У Linux за замовчуванням шлях для цього:

[learner@localhost ~]$ sudo vi /etc/my.cnf

Додайте ці рядки у файл my.conf, щоб дозволити ip, який потрібно.

bind-address = 127.0.0.1   
bind-address = 0.0.0.0

Дякую a_learner, за інформацію, хоча я вже прийняв відповідь.
Пітер Сніг

0

PHP все ще намагається використовувати розташування сокета за замовчуванням. Ця проблема може з’явитися, якщо ви перемістили папку MariaDB / MySQL з / var / lib / mysql в інше місце. Для вирішення проблеми вам потрібно визначити місце нового сокета у файлі /etc/php.ini .

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

0

Я вирішив цю проблему шляхом створення символічного посилання, sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Але спочатку я повинен створити папку, /var/run/mysqld/оскільки папка спочатку не існувала.


-1

Вам потрібен mysql.sock в / tmp

ln -s /var/lib/mysql/mysql.sock mysql.sock

повинні добре працювати після цього.

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