Назад | Перейти на главную страницу

Не могу подключиться к MySQL с помощью localhost, но с 127.0.0.1 это нормально?

Мой файл / 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

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

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

Я пробовал различные модификации hosts файл, но ничего из того, что я пробовал до сих пор, не помогло.

На сервере работает Ubuntu 12.04.02 LTS. В нем не установлен selinux, и описанная выше ситуация сохраняется даже после настройки политик IPtables по умолчанию для их принятия и сброса.

Вы можете проверить одну вещь (которая требует входа в консоль 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)

Просто выбросить его туда, на всякий случай, в этом проблема.

Большинство клиентов MySQL выглядят странно тем, что если вы укажете хост как localhost, они называют это соединением сокета, а не соединением TCP. У вас есть варианты: придерживаться 127.0.0.1 или, если клиент поддерживает это (например, двоичный файл mysql CLI делает с --protocol flag), заставьте его использовать TCP вместо сокета unix.

Вы можете проверить разрешение следующим образом:

[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

Следует отметить, что если гранты верны, если вы используете MariaDB, возникла ошибка, которая вызвала такое точное поведение в версиях 10.0.1 и 5.5.30. https://mariadb.atlassian.net/browse/MDEV-4356

PHP все еще пытается использовать расположение сокета по умолчанию. Эта проблема может возникнуть, если вы переместили папку MariaDB / MySQL из / var / lib / mysql в другое место. Чтобы решить эту проблему, вам необходимо определить местоположение нового сокета в /etc/php.ini файл.

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

Я решил эту проблему, создав символическую ссылку, sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock. Но сначала мне нужно создать папку /var/run/mysqld/ потому что папка изначально не существовала.

Вам нужен mysql.sock в / tmp

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

после этого должен работать нормально.