Подключение к удаленному серверу баз данных

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

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

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



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

 

 

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

Прежде всего, авторизуемся на сервере, который будет служить сервером баз данных и устанавливаем 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 = 123.123.123.123

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

/etc/init.d/mysql restart

 

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

mysql -u root -p

 

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

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

FLUSH PRIVILEGES;

 

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

/etc/init.d/mysql restart

Проверяем наличие существующих баз данных и пользователей 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