Синхронизация локальных баз данных 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 с использованием проверки подлинности на основе ключей для большей безопасности.