Резервная многопользовательская БД MySQL для одного клиента - PullRequest
0 голосов
/ 06 октября 2011

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

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

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

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

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

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

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

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

1 Ответ

0 голосов
/ 08 октября 2011

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

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

...