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

MariaDB отказывается от удаленных подключений

Я просмотрел много руководств и вопросов, но все еще не могу заставить его работать.

Я был в:

Я установил MariaDB на Ubuntu 16.04. Затем настройте двух пользователей, один из которых предназначен для публичного использования, чтобы я мог разместить его здесь.

Пользователи добавляются как:

CREATE USER 'anon'@'%' IDENTIFIED BY '';

Работают ли локальные связи?

Да, я могу подключиться как пользователи через ssh на сервере:

mysql -u anon

Вы проверили, что пользователи добавлены правильно?

Я думаю так:

MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';
+------+------+
| User | Host |
+------+------+
| anon | %    |
| user | %    |
+------+------+
2 rows in set (0.01 sec)

Вы разблокировали брандмауэр?

Возможно, потребуется разблокировать межсетевой экран:

[user]@popfreq:/etc/mysql$ firewall-cmd --add-port=3306/tcp 
The program 'firewall-cmd' is currently not installed. You can install it by typing:
sudo apt install firewalld

Брандмауэр не установлен.

Вы проверили правильные настройки в файле my.cnf?

Неправильные настройки в my.cnf ([user]@popfreq:/etc/mysql) может привести к отказу от соединений. Эти skip-networking и bind-address. Мой файл выглядит так:

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

На нем вообще нет оскорбительных линий.

Вы проверяли другие файлы конфигурации?

Да. Не было и обидных строк.

Телнет работает?

Нет.

mint@mint-VirtualBox ~ $ telnet 128.199.203.208 3306
Trying 128.199.203.208...
telnet: Unable to connect to remote host: Connection refused

Не уверен, что это значит и как исправить.

Какой интерфейс использует сервер?

Местное только кажется:

[user]@popfreq:/etc/mysql/mariadb.conf.d$ sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      16884/mysqld    

Вы не забыли перезапустить? Да. Я возобновил использование этого между всеми попытками:

sudo service mysql restart

Решение ошибки в моем случае заключалось в том, что не было [mysqld] раздел вообще в my.cnf файлы конфигурации. Добавление этого решило проблему:

[mysqld]
bind-address = ::

Не уверен, почему он не был добавлен по умолчанию. Обратите внимание, что причина использования :: над 0.0.0.0 в том, что :: работает и для IPv6 (упоминается в руководстве по mySQL, но не руководство mariaDB).

Это также исправило телнет:

mint@mint-VirtualBox ~ $ telnet 128.199.203.208 3306
Trying 128.199.203.208...
Connected to 128.199.203.208.

И теперь сетевой вывод:

[user]@popfreq:/etc/mysql$ sudo netstat -ntlup | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      17609/mysqld   

Надеюсь, это поможет кому-то другому.

После того, как я столкнулся с той же проблемой (на Debian Stretch) и уже безуспешно попробовал все упомянутые здесь решения, я наконец нашел этот откуда я просто публикую важную часть:

Отредактируйте /etc/mysql/mariadb.conf.d/50-server.cnf, прокомментируйте адрес привязки и добавьте оператор sql-mode:

[...]
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
#bind-address           = 127.0.0.1

sql-mode="NO_ENGINE_SUBSTITUTION"

[...]

и - это сработало.