2016-02-28 3 views
0

Я использую cbbackup для резервного копирования couchbase. Затем выполните некоторые операции с db, например, добавление и удаление документов. После операции я хочу отменить все операции и восстановить db в состояние резервного копирования.Как восстановить couchbase в состояние резервной копии?

Я сделал следующее испытание. cbbackup и cbrestore не помогают во время моего теста. Как достичь моей цели?

  1. резервного копирования БД

    $ rm -rf /tmp/cbbackup 
    $ /opt/couchbase/bin/cbbackup http://cb_ip:8091 /tmp/cbbackup -u 'xxx' -p '***' -v 
    
  2. Помните количество элементов социальной ведре.

    • Количество: 33
  3. Удалить один документ из социальной ведре
    • Delete ID: приложенное-элемент-110
  4. Добавить два новых документа в социальной ведре
    • Ids: new-item-1, new-item-2
  5. Запомните количество предметов социального ведра.
    • Количество: 34
  6. Восстановление социального ведро

    $ /opt/couchbase/bin/cbrestore /tmp/cbbackup http://cb_ip:8091 -u 'xxx' -p '***' -b mybucket -v 
    
  7. Проверьте, если удаленный документ возвращается, и если добавленные документы не будут удалены.

    • Результат: Кол-во: 34, без изменений
    • Удаленный элемент не вернется.
    • Добавленные предметы не удаляются.
  8. Conclution: cbrestore не может восстановить db в резервную точку времени. Изменения после момента резервного копирования не удаляются.

  9. Используйте cbtransfer для восстановления данных. Результат и вывод такие же, как cbrestore.

    $ /opt/couchbase/bin/cbtransfer /tmp/cbbackup http://cb_ip:8091 -u 'xxx' -p '***' -b mybucket -v 
    

ответ

1

Перед тем, как непосредственно ответ там вопрос, позвольте мне объяснить два важных понятия о cbbackup и cbrestore.

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

  2. Couchbase имеет возможность разрешения конфликтов во время комплектов. Это означает, что если вы создали резервную копию ключа, а затем обновили его, то разрешите восстановление и разрешение конфликта, тогда набор во время восстановления будет отброшен, так как он не является последним обновлением.

Ниже приведены два сценария резервного копирования, которые применимы к вашему прецеденту.

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

Предположим, что в другом сценарии вы просто хотите переписать все данные в вашем ковше с данными, которые вы скопировали. В этом случае вы хотите отключить разрешение конфликтов, и вы можете сделать это с помощью флага «-x conflict_resolve = 0». Это будет работать в случае, когда я резервировал 1000 ключей, а затем обновлял их, а затем хотел отменить обновления, которые я сделал после резервного копирования. (Обратите внимание, что флаг conflict_resolve был случайно удален в Couchbase 4.0 и 4.1, но будет добавлен обратно в 4.1.1 и 4.5)

В заключение я бы рекомендовал не использовать cbtranfer, так как он не тестировался, а также cbbackup и cbrestore, и этот инструмент обычно используется только в качестве последнего средства.

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