Агрегирование нескольких распределенных баз данных MySQL - PullRequest
2 голосов
/ 19 июля 2010

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

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

Ключи будут пространством имен, поэтому здесь не должно быть никакого конфликта, но я 'Я не совсем уверен в элегантном способе создать это.Я имею в виду временную метку каждой строки и выполнение запроса "SELECT * FROM [table] WHERE timestamp > last_backup_time" для каждой таблицы, затем вывод ее в файл и массовую загрузку на главном сервере.

Распределенные компьютеры НЕ будут иметь доступа к Интернету.Мы находимся в очень сельской части страны третьего мира.

Есть предложения?

1 Ответ

1 голос
/ 19 июля 2010

Ваш

SELECT * FROM [table] WHERE timestamp > last_backup_time

пропустит УДАЛЕННЫЕ строки.

Что вы, вероятно, хотите сделать, это использовать репликацию MySQL через USB-накопитель. То есть, включите binlog на ваших исходных серверах и убедитесь, что binlog не выбрасывается автоматически. Скопируйте файлы binlog на USB-накопитель, затем PURGE MASTER LOGS TO ..., чтобы стереть их на исходном сервере.

На сервере агрегации с помощью команды mysqlbinlog включите binlog в исполняемый скрипт, а затем импортируйте эти данные в виде скрипта SQL.

Сервер агрегации должен иметь копию каждой базы данных исходных серверов, но может иметь ее под другим именем схемы, если ваш SQL все использует неквалифицированные имена таблиц (никогда не использует синтаксис schema.table для ссылки на таблицу) , Импорт сгенерированного сценария mysqlbinlog (с префиксом правильной команды USE) будет затем отражать изменения исходных серверов на сервере агрегации.

Агрегирование по всем базам данных можно затем выполнить с использованием полных имен таблиц (т. Е. С использованием синтаксиса schema.table в операторах JOINs или INSERT ... SELECT).

...