2015-08-10 3 views
10

У меня есть две базы данных: одна в Лондоне и одна в Дублине. Как я могу получить полное представление о данных в базе данных облаков? Предположим, что структура базы данных позволяет мне использовать несколько местоположений, чтобы не было столкновений.Синхронизация локальных баз данных MySQL с облачной базой данных

Replication

EDIT: Все изменения в базах данных выполняются локально. Например: допустим, у меня есть датчик в Дублине, который сбрасывает данные в базе данных Дублина и другом датчике в Лондоне, который сбрасывает собранные данные в лондонской базе данных. Как получить федеративное представление этих данных в моей базе данных облаков? Из интерфейса администратора я хочу запросить базу данных облака, а не другие.

ответ

2

Вы можете определить FEDERATED таблицы в базе данных «облако»: любые запросы на эти таблицы будут передаваться от сервера «облако» на соответствующий сервер London/Dublin по протоколу клиента MySQL (обратите внимание, что данные не копируется на сервер «облако», поэтому он не оказывает никакой резервной службы):

CREATE SERVER london FOREIGN DATA WRAPPER mysql OPTIONS (
    HOST 'london.mysql.example.com', 
    PORT 9306, 
    USER 'cloud_db_user', 
    PASSWORD '...', 
    DATABASE 'my_database' 
); 

CREATE SERVER dublin FOREIGN DATA WRAPPER mysql OPTIONS (
    HOST 'dublin.mysql.example.com', 
    PORT 9306, 
    USER 'cloud_db_user', 
    PASSWORD '...', 
    DATABASE 'my_database' 
); 

CREATE TABLE london_table (
    -- table definition as normal 
) 
ENGINE=FEDERATED 
CONNECTION='london/original_table'; 

CREATE TABLE dublin_table (
    -- table definition as normal 
) 
ENGINE=FEDERATED 
CONNECTION='dublin/original_table'; 

затем можно определить VIEW, который содержит UNION этих объединенных таблиц. К сожалению, однако, UNION взгляды ни вставляться, ни изменяемым-так что если вам нужно совершить какие-либо изменения в данных, которые вы должны были бы работать на базовой (федеративного) таблицы:

CREATE VIEW combined AS 
    SELECT * FROM london_table 
UNION ALL 
    SELECT * FROM dublin_table; 
+0

Нужно ли иметь префикс в определениях таблиц? раздражает. – zinking

+0

@zinking: Имеет ли значение, когда ваш код приложения может просто использовать 'VIEW'? – eggyal

+0

звучит так, будто у вас должен быть 2 немного отличающихся сценария создания таблицы. – zinking

2

Вы можете настроить MariaDB в облаке сервер и серверы LONDON и DUBLIN в качестве мастеров. Репликация нескольких мастеров доступна в MariaDB. Я предполагаю, что у мастеров разные имена баз данных.

https://mariadb.com/kb/en/mariadb/multi-source-replication/

5

План А: Галера кластера (как найдено в MariaDB), который включает в себя 3 серверов.

План B: «Репликация нескольких источников», в которой ваши два физических сервера являются мастерами, а облачный сервер - подчиненным. Опять же, требуется MariaDB. (См. Ответ DBHash.)

2

Presto также полезен здесь.

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

писать запросы для объединения результатов из обеих баз данных. что-то вроде:

select * from dublin.A 
union all 
select * from london.A 

Some Random Links on this

2

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

+0

Решение на заказ всегда работает. Тем не менее, он думал, что может быть самозанятое решение. – Andrei

0

Вы можете настроить репликацию, установив облачный сервер/базу данных как Master и базы данных в других местах в качестве ведомого, поэтому любые данные, добавленные в Master, будут реплицированы в подчиненный.

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

В качестве альтернативы вы можете использовать SQLyog, где вы можете подключиться к серверу MySQL/MariaDB (или любым вилкам MySQL) и синхронизировать данные между облачной базой данных и базой данных в других местах. Это позволяет настроить синхронизацию сразу или позже. Если сервер размещен удаленно, было бы лучше подключиться через SSH, используя проверку подлинности на основе ключей для большей безопасности.

Смежные вопросы