Резервное копирование многоклиентской БД MySQL для одного клиента

Я столкнулся с проблемой для задачи, которую я должен сделать на работе. У меня есть база данных MySQL, в которой хранится информация о нескольких клиентах моей компании, и мне нужно создать процедуру резервного копирования/восстановления для резервного копирования и восстановления такой информации для любого отдельного клиента. Чтобы уточнить, если мой клиент A теряет свои данные, я должен иметь возможность восстановить такие данные, будучи уверенным, что я не изменяю данные клиента B, C, ... Я не администратор БД, поэтому я не знаю, могу ли я сделать это с помощью стандартных инструментов mysql (таких как mysqldump) или любых других инструментов резервного копирования (таких как Percona Xtrabackup).

Для резервного копирования мои исследования (и моя интуиция) привели меня к этому возможному решению:

  1. создайте оператор вставки восстановления, используя синтаксис вставки-выбора (http://dev.mysql.com/doc/refman/5.1/en/insert-select.html);
  2. сохраните эти вставки в файл sql либо в правильном порядке, либо разрешив этому сценарию временно отключить проверки внешнего ключа для соответствия ограничениям внешних ключей;
  3. конечно, я делаю это для всех своих клиентов ежедневно, используя файл для каждого клиента (и дня).

Затем, в случае, если мне нужно восстановить данные для конкретного клиента:

  1. удаляю все его оставшиеся данные;
  2. Я восстанавливаю правильные данные, используя его файл sql, который я создал во время резервного копирования.

Таким образом, я считаю, что могу восстановить правильные данные клиента А, не касаясь данных клиента Б. Будет ли мое решение в конечном итоге работать? Есть ли лучший способ добиться того же результата? Или вам нужна дополнительная информация о моей проблеме?

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

Примечание: мы также создадим резервную копию всей базы данных с помощью mysqldump.


person ThanksForAllTheFish    schedule 06.10.2011    source источник


Ответы (1)


Вы можете использовать параметр --where, вы можете указать условие, например *client_id=N* . Конечно, я делаю предположение, поскольку вы не предоставляете никакой информации о своей схеме.

Если у вас схема Star , вы, вероятно, могли бы написать небольшой сценарий, который создает резервную копию всех таблиц поиска (учитывая, что они достаточно малы), используя этот параметр --tables и условие --where для вашего таблица данных клиента. Для дополнительной производительности, возможно, вы могли бы разбить таблицу по client_id.

person georgepsarakis    schedule 08.10.2011
comment
Спасибо... в данный момент мой стол маленький, так что это звучит полезное решение! И ваше предположение также верно, я забыл добавить эту информацию к своему вопросу! - person ThanksForAllTheFish; 11.10.2011
comment
Большой! Если вы считаете, что этот ответ полезен для вас, не могли бы вы отметить его как ответ? :) - person georgepsarakis; 12.10.2011