Мой файл / 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
после этого должен работать нормально.