2010-07-19 2 views
2

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

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

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

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

Любые предложения?

ответ

1

Ваш

SELECT * FROM [table] WHERE timestamp > last_backup_time 

пропустит строки DELETEed.

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

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

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

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

+0

это действительно пятно. Я займусь этим. Благодаря! – user358829

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