MySQL отказывается принимать удаленные подключения

13

Я только что установил новый сервер Ubuntu с MySQL (Percona 5.5), но он отказывается принимать подключения от удаленных хостов

Вот что произойдет, если я попытаюсь подключиться к этому серверу удаленно:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Когда я проверил, слушает ли mysql удаленные соединения, я увидел это:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Как вы можете видеть, он говорит, 127.0.0.1:3306что означает «Я принимаю только локальные соединения».

Я проверил мои skip_networkingи bind-addressпеременные - все выключено:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

У меня есть другой сервер с абсолютно такой же конфигурацией, и он прекрасно работает:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

В чем может быть причина этого? Как заставить mysql реагировать на удаленные соединения?

Temnovit
источник
Обратите внимание, что эта переменная bind_addressдоступна только с версии 5.6 ( bugs.mysql.com/bug.php?id=44355 ), поэтому она вернет пустой набор в v5.5, даже если он установлен.
Факер
Покажите нам свои настройки my.cnf.
user9517
Вы проверяли на наличие проблем вне mySQL, таких как брандмауэр или проблема маршрутизации?
Stese

Ответы:

20

Попробуйте добавить bind-address = 0.0.0.0в свой [mysqld]раздел my.cnfи перезапустите mysqld .

Гидо Ваккарелла
источник
2
Дело в/etc/mysql/mysql.conf.d/mysqld.cnf
Эдуардо Куомо
Мой был в /etc/my.cnf.d/bind-addr.cnf
Джозеф
0

Это может быть связано с таблицей пользователей базы данных mysql (используйте mysql; покажите таблицы;). Если привязка к 0.0.0.0 у вас не работает, попробуйте указать вашему пользователю хост «%» вместо «localhost» в этой таблице.

Например, попробуйте создать пользователя как:

СОЗДАТЬ ПОЛЬЗОВАТЕЛЯ yourusername @ '%' ИДЕНТИФИЦИРОВАНО 'yourpassword'

Муравей пытается связаться с этим пользователем.

periket2000
источник
3
Отказ в соединении обычно означает, что ничего не прослушивается на соответствующем IP: порту.
user9517
Правда, у меня вспыхнуло сообщение «Не удается подключиться к серверу MySQL», я не помню по телнету. Сожалею.
periket2000
«Не удается подключиться к MySQL» не происходит из-за того, что привилегия недоступна для пользователя. Это пара {IP: порт}, которая не соответствует попытке подключения.
Фабьен Хаддади
0

Когда все остальное терпит неудачу, и вы уверены, что сервер прослушивает порт по умолчанию, и вы пытаетесь отчаянно подключиться к клиенту mysql с другого хоста, попробуйте указать порт в URL-адресе команды mysql.

Как это ни странно, мне пришлось использовать следующий синтаксис:

mysql -h someHost --port=3306 -u someUser -p someDb

Я нашел это (ошибка?) Совершенно случайно (после того, как потерял свои волосы :)).

Моя установка: debian jessie, свежий mysql 5.7.18, пользователи / db созданы, bind-адрес закомментирован, mysqld перезапущен

Ондрей
источник
Рациональное объяснение заключается в том, что сервер someHost MySQL на самом деле прослушивает 3306, как демонстрирует директива --port. Но ваш двоичный файл клиента mysql происходит из версии MariaDB ... поэтому по умолчанию используется порт 3307, если не указано иное. Проверьте происхождение двоичного файла клиента mysql, который вы используете. Подсказка: проверьте и переменную среды PATH ...
Фабьен Хаддади,
0

У меня только была эта проблема, и моя проблема, казалось, была связана с брандмауэром. Кстати, спасибо @Temnovit за команды по устранению неполадок Mysql.

Я использовал netstat, чтобы сказать, что сервер работает и на правильном порту. Я также мог сказать, что мой сервер не принимает соединения через этот порт с помощью простой команды telnet.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

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

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Моя команда telnet была тогда успешной.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Если у вас все еще есть проблемы, скорее всего это проблема с разрешениями пользователей.

Эрик Фоссум
источник
0

Я mariadbустановил. Решением было изменить bind-addressрасположение/etc/mysql/mariadb.conf.d/50-server.cnf

Алекс Балком
источник
-1

Решение, описанное в приведенной ниже ссылке, должно решить вашу проблему http://www.debianhelp.co.uk/remotemysql.htm

bml13
источник
2
bml13, цитирование ссылки в поддержку вашего ответа - отличная практика, но мы предпочитаем, чтобы люди писали здесь ответ и добавляли ссылку, а не просто помещали ссылку и оставляли ее при этом.
MadHatter
1
... особенно потому, что теперь это мертвая ссылка.
ХАЗ