MySql: подключаем таблицу из удаленной базы

Нужно из локальной базы MySql на первом сервере обратиться к таблице в базе на втором сервере. Чтобы не тянуть всю базу, не настраивать сложные условия синхронизации было принято решение организовать локальную FEDERATED таблицу, которая будет обращаться к удаленной таблице. Это быстрее, часто безопаснее (при правильной настройке) и проще.

Порядок действия следующий: включаем поддержку FEDERATED на первом сервере MySQL, создаем на нем federarted таблицу с такой же структурой (либо только с необходимыми полями), настраиваем VPN доступ до необходимого сервера, на втором сервере создаем пользователя mysql с требуемыми правами доступа к необходимой таблице с требуемого IP адреса.

Включаем поддержку FEDERATED
Подключаемся к командной строке mysql и даем команду:
mysql> show engines;
В получившейся таблице в столбце Engine ищем FEDERATED. Если модуля нету, инсталлируем модуль Federated Storage Engine:
mysql> install plugin federated soname 'ha_federated.so';
Далее повторяем команду:
mysql> show engines;
Должна появиться запись FEDERATED. Если в графе Support стоит NO, то необходимо отредактировать my.cnf: добавить в блог [mysqld] запись federated и перезапустить mysql:
nano /etc/mysql/my.cnf
[mysqld]
# Включаем Federated Storage Engine для подключения внешней таблицы
federated
/etc/init.d/mysql restart
Далее повторяем команду  show engines; и смотрим вывод, должно быть: Engine - FEDERATED, SUPPORT - YES.

Настраиваем VPN между серверами
В моем случае была выделена подсеть 10.8.1.0/24, IP первого сервера 10.8.1.2, второго сервера 10.8.1.3.

Настраиваем права доступа
Во второй базе создаем пользователя mysql с правами чтения (в моем случае) к нужной таблице source_base/source_table с возможностью подключения с IP первого сервера:
mysql> grant select on source_base/source_table to new_mysql_user@10.1.1.2 identified by 'mysql_password';
Далее на первом сервере создаем базу:
USE my_database;
CREATE TABLE my_table (
uid varchar(64) NOT NULL,
password varchar(128) NOT NULL,
city_id int(11) NOT NULL,
first_name varchar(64) NOT NULL,
middle_name varchar(64) DEFAULT NULL,
last_name varchar(64) NOT NULL,
is_active tinyint(1) DEFAULT 1,
PRIMARY KEY (contract)
) ENGINE=FEDERATED
CHARSET=utf8
CONNECTION='mysql://new_mysql_user:mysql_password@10.1.1.3/source_base/source_table';
И проверяем данные:
mysql> use my_database;
mysql> select * from my_table;
Если вам требуется настроить полную репликацию базы на свой сервер и обращаться к ней напрямую, воспользуйтесь этой статьей.

Комментариев нет:

Отправить комментарий