Настройка главной базы данных для управления структурой других баз данных - PullRequest
2 голосов
/ 24 января 2011

У меня есть случай, когда у меня есть несколько баз данных, работающих на одном сервере.Для каждого клиента есть одна база данных (компания1, компания2 и т. Д.).Структура каждой из этих баз данных должна быть идентичной с теми же таблицами и т. Д., Но данные, содержащиеся в каждой БД, будут разными.

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

Пример. Если в основной базе данных создана таблица с именем Table1, другие базы данных (company1, company2 и т. д.) также получат table1.

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

Могу ли я использовать какую-то логику для схем базы данных, чтобы сделать это?

Итак, в основном я спрашиваю здесь:

  1. Как сделать так, чтобы эта синхронизация происходила наилучшим образом?Должен ли я использовать скрипт, отслеживающий журналы на предмет изменений или каким-либо другим способом?

  2. Как избежать повреждения существующих данных при изменении таблицы?(данные удаляются, если таблица отбрасывается, это нормально)

  3. Считается ли синхронизация из основной базы данных хорошим способом сделать то, что я хочу (имея простую в обслуживании структуру для нескольких баз данных)?

  4. Как такое обновление повлияет на производительность баз данных?

Надеюсь, мой вопрос был ясен и что это не дубликаткакой-то другой поток.Если потребуется больше информации и / или более подробное объяснение моей проблемы, дайте мне знать:)

1 Ответ

0 голосов
/ 25 января 2011

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

select TABLE_NAME from information_schema.tables where TABLE_SCHEMA='<master table name>';

Используйте этот список для скрипта или хранимой процедуры ala:

create database if not exists <name>;
use <name>;
for each ( table_name in list )
    create table if not exists <name>.table_name like <master_table>.table_name;

Теперь, когда я думаю об этом, вы можете включить триггер в базу данных 'information_schema.tables', который будет вызывать скрипт 'create / keep'. Ищите вставки и реагируйте соответственно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...