Подключение к удаленному MySQL серверу


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

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



Подключение к удаленному MySQL


Настройка производится на двух VDS, использующих операционную систему Debian, при использовании CenOS и других дистрибутивов команды могут отличаться, но принципы настройки аналогичны.



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

apt-get install mysql-server


Производим изначальную конфигурацию в автоматическом режиме

mysql_secure_installation


При этом разрешаем удаленное подключение от имени пользователя root (необходимо только при удаленном подключении от имени пользователя root)

Disallow root login remotely? no

Также потребуется внести коррективы в основной конфигурационный файл MySQL /etc/mysql/my.cnf


Параметр bind следует закомментировать. Если необходимо ограничить доступ к  MySQL извне — использовать iptables

#bind-address = 127.0.0.1


mysql bind


Чтобы конфигурационный файл считался — перезапускаем сервис

systemctl restart mysql


Авторизуемся в  MySQL

mysql -u root -p



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

GRANT ALL ON *.* TO testuser@'123.123.123.124' IDENTIFIED BY 'secretpassword';


FLUSH PRIVILEGES;



Здесь указываем ip адрес основного сервера, с которого работает веб-проект. Если подключение производится с нескольких серверов — команду можно повторять несколько раз.

systemctl restart mysql


Проверяем наличие существующих баз данных и пользователей MySQL (должны увидеть данные пользователя testuser)

SHOW DATABASES;


SELECT user FROM mysql.user;



Настройки на основном сервере проекта


Авторизуемся на основном сервере

Создаем локального пользователя

CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'secretpassword';


Выполняем команду nmap, убеждаемся в том, что порт на сервере баз данных открыт

nmap 123.123.123.123


Авторизуемся с реквизитами пользователя testuser в MySQL удаленно указывая IP адрес сервера баз данных

mysql -u testuser -h 123.123.123.123 -p


Если никаких ошибок при авторизации не появляется — все сделано верно, пробуем пробуем создать базу данных.

CREATE DATABASE table;



Возможные проблемы с подключением к удаленному MySQL серверу и их решение


В случае если имеют место какие-либо трудности при подключении — проверяем iptables на предмет наличия запрещающих правил:

iptables-save


Если запрещающие правила обнаружены — их следует удалить.


Также можно добавить разрешающее правило — на основном сервере синтаксис команды будет следующим:

/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT



Из соображений безопасности можно не предоставлять все права пользователю удаленного сервера выдать только права на SELECT,INSERT,UPDATE или DELETE. В примере пользователю выдали права на все базы данных, без каких либо трудностей права можно выдать на конкретную БД или таблицу БД.


Читайте также про отказоустойчивые кластеры Master-Slave MySQL и Galera Cluster

Сказать спасибо