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

12 set 2022 3 min di lettura
Как разрешить удаленные подключения к серверу базы данных MySQL
Indice dei contenuti

Введение

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

Однако в некоторых ситуациях необходимо разрешить удаленные подключения. Например, когда вы хотите подключиться к удаленному серверу 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, по умолчанию установлено значение 127.0.0.1 (слушать только на локальном хосте).

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

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 -u root -p

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

GRANT ALL ON database_name.* TO username@'ip_address' IDENTIFIED BY 'password';

Где это находится:

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

Например, чтобы предоставить доступ к базе данных с именем db_noviello пользователю с именем dbuser и паролем 12345678 с клиентского компьютера с IP-адресом 10.10.99.99, выполните:

GRANT ALL ON db_noviello.* TO dbuser@'10.10.99.99' IDENTIFIED BY '12345678';

Конфигурация брандмауэра

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

iptables

Если вы используете iptables в качестве брандмауэра, следующая команда разрешит доступ с любого IP-адреса в Интернете к порту MySQL (не рекомендуется):

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

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

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

УФВ

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

sudo ufw allow 3306/tcp

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

sudo ufw allow from 10.10.99.99 to any port 3306

Брандмауэр Д.

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.10.99.99/32
sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcp
sudo firewall-cmd --reload

Проверить изменения

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

mysql -u username -h ip_address -p

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

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

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

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

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

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

Вывод

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.