Синхронизация локальных баз данных MySQL с облачной базой данных

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

Репликация

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

Ответ 1

План A: кластер Galera (как показано в MariaDB), который включает в себя 3 сервера.

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

Ответ 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;

Ответ 3

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

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

Ответ 4

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

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

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

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

Некоторые случайные ссылки в этом

Ответ 5

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

Ответ 6

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

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

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