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

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

Чтобы сделать резервную копию, мои исследования (и моя интуиция) привели меня к этому возможному решению:

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

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

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

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

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

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

1 ответ

Решение

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

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

Другие вопросы по тегам