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

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

Я только что установил новый сервер 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)

У меня есть другой сервер с абсолютно то же самое config, и он отлично работает:

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

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

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

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

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

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

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

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

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

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

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

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

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

У меня была эта проблема, и моя проблема, похоже, была связана с брандмауэром. Кстати - Спасибо @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.
➜  ~

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

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