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

Удаленные подключения MySQL

По умолчанию сервер MySQL прослушивает соединения только с локального хоста, что означает, что к нему могут получить доступ только приложения, работающие на том же хосте.

Однако в некоторых ситуациях требуется удалённый доступ к серверу MySQL. Например, может потребоваться подключение к удалённому серверу MySQL из локальной системы или в случае многосерверной среды, где приложение и сервер базы данных работают на разных машинах. Один из вариантов — доступ к серверу MySQL через SSH-туннель , а другой — настройка сервера MySQL для приёма удалённых подключений.

В этой статье описываются шаги, необходимые для разрешения удалённых подключений к серверу MySQL. Те же инструкции применимы и к MariaDB.

Настройка сервера MySQL

Первый шаг — настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на машине.

Если сервер MySQL и клиенты могут взаимодействовать через частную сеть, лучшим вариантом будет настроить сервер MySQL на прослушивание только частного IP-адреса.

В противном случае, если вы хотите подключиться к серверу через публичную сеть, настройте сервер MySQL на прослушивание всех IP-адресов на машине. Для этого необходимо отредактировать файл конфигурации MySQL и добавить или изменить значение параметра bind-address . Вы можете указать один IP-адрес или диапазоны IP-адресов. Если адрес — 0.0.0.0 , сервер MySQL будет принимать подключения на всех интерфейсах IPv4 хоста. Если в вашей системе настроен IPv6, то вместо 0.0.0.0 используйте :: .

Расположение файла конфигурации MySQL различается в зависимости от дистрибутива. В Ubuntu и Debian он находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf , а в дистрибутивах на базе Red Hat, таких как CentOS, он находится по адресу /etc/my.cnf .

Откройте файл с помощью текстового редактора :

 sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Найдите строку, начинающуюся с bind-address , и задайте в ее значении IP-адрес, который должен прослушивать сервер MySQL.

По умолчанию установлено значение 127.0.0.1 (прослушивание только на локальном хосте).

В этом примере мы настроим сервер MySQL на прослушивание всех интерфейсов IPv4, изменив значение на 0.0.0.0

mysqld.cnf

 bind-address = 0.0.0.0 # skip-networking

Если есть строка, содержащая skip-networking , удалите ее или закомментируйте, добавив # в начале строки.

В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте её в раздел [mysqld] .

После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Перезапускать службы могут только пользователи root или с правами sudo .

Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:

 sudo systemctl restart mysql

В дистрибутивах на базе RedHat, таких как CentOS, для перезапуска службы выполните:

 sudo systemctl restart mysqld

Предоставление доступа пользователю с удаленной машины

Следующий шаг — разрешить удаленному пользователю доступ к базе данных.

Войдите на сервер MySQL как пользователь root, введя:

 sudo mysql

Если вы используете старый, родной плагин аутентификации MySQL для входа в систему как пользователь root, выполните указанную ниже команду и введите пароль при появлении соответствующего запроса:

 mysql -uroot -p

Изнутри оболочки MySQL используйте оператор GRANT для предоставления доступа удаленному пользователю.

 GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';

Где:

  • database_name — имя базы данных, к которой будет подключаться пользователь.
  • user_name — имя пользователя MySQL.
  • ip_address — это IP-адрес , с которого будет подключаться пользователь. Используйте % , чтобы разрешить пользователю подключаться с любого IP-адреса.
  • user_password — пароль пользователя.

Например, чтобы предоставить доступ к базе данных dbname пользователю foo с паролем my_passwd с клиентского компьютера с IP-адресом 10.8.0.5 , необходимо выполнить:

 GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Настройка брандмауэра

Последний шаг — настроить брандмауэр так, чтобы он разрешал трафик через порт 3306 (порт MySQL по умолчанию) с удаленных машин.

Iptables

Если вы используете iptables в качестве брандмауэра, команда ниже разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это крайне небезопасно.

 sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Разрешить доступ с определенного IP-адреса:

 sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

УФВ

UFW — это брандмауэр по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), выполните:

 sudo ufw allow 3306/tcp

Разрешить доступ с определенного IP-адреса:

 sudo ufw allow from 10.8.0.5 to any port 3306

FirewallD

FirewallD — это стандартный инструмент управления брандмауэром в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:

 sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp sudo firewall-cmd --reload

Чтобы разрешить доступ с определённого IP-адреса через определённый порт, вы можете создать новую зону FirewallD или использовать расширенное правило. Создайте новую зону с именем mysqlzone :

 sudo firewall-cmd --new-zone=mysqlzone --permanent sudo firewall-cmd --reload sudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32 sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp sudo firewall-cmd --reload

Проверка изменений

Чтобы проверить, может ли удаленный пользователь подключиться к серверу MySQL, выполните следующую команду:

 mysql -u user_name -h mysql_server_ip -p

Где user_name — имя пользователя, которому вы предоставили доступ, а mysql_server_ip — IP-адрес хоста, на котором работает сервер MySQL.

Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.

Если вы получили ошибку, подобную приведенной ниже, то либо порт 3306 не открыт , либо сервер MySQL не прослушивает IP-адрес .

 ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)"

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

 "ERROR 1130 (HY000): Host '10.8.0.5' is not allowed to connect to this MySQL server"

Заключение

MySQL, самый популярный сервер баз данных с открытым исходным кодом, по умолчанию прослушивает входящие соединения только на локальном хосте.

Чтобы разрешить удаленные подключения к серверу MySQL, необходимо выполнить следующие действия:

  1. Настройте сервер MySQL на прослушивание всех или определенного интерфейса.
  2. Предоставьте доступ удаленному пользователю.
  3. Откройте порт MySQL в брандмауэре.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

mysql mariadb

Связанные руководства

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *