如何将couchbase恢复到备份状态?

时间:2016-02-28 00:41:40

标签: couchbase database-restore

我使用cbbackup来备份couchbase。然后对数据库执行一些操作,例如添加和删除文档。操作完成后,我想丢弃所有操作并将db恢复到备份状态。

我做了以下测试。 cbbackup和cbrestore在测试期间没有帮助。如何实现我的目标?

  1. 备份数据库

    $ rm -rf /tmp/cbbackup
    $ /opt/couchbase/bin/cbbackup http://cb_ip:8091  /tmp/cbbackup -u 'xxx' -p '***' -v
    
  2. 记住社交桶的项目数。

    • 数:33
  3. 从社交存储桶中删除一个文档
    • 删除ID:existing-item-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. 结论:cbrestore无法将db恢复到备份时间点。备份时间点之后的更改不会被删除。

  9. 使用cbtransfer恢复数据。结果和结论与cbrestore相同。

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

1 个答案:

答案 0 :(得分:2)

在我直接回答你的问题之前,让我解释一下有关cbbackup和cbrestore的两个重要概念。

  1. 这些工具在备份和还原过程中不会传输原始数据文件。在备份期间,数据流出服务器并写入磁盘,并且在恢复期间使用set操作将数据放入数据库。

  2. Couchbase具有在集合期间进行冲突解决的能力。这意味着,如果您备份了密钥,然后对其进行了更新,然后执行恢复并启用冲突解决,则恢复期间的设置将被丢弃,因为它不是最新的更新。

  3. 以下是适用于您的用例的两种备份方案。

    首先让我们来看看时间点恢复方案。为了实现这一点,您应该删除并重新创建您的存储桶,然后运行cbrestore。原因是cbrestore不会知道您在备份后添加的新密钥,并且无法删除它们。

    让我们假设在另一种情况下,您只想强制使用您备份的数据覆盖存储桶中的所有数据。在这种情况下,您希望禁用冲突解决,并且可以使用“-x conflict_resolve = 0”标志执行此操作。这将适用于我备份1000个密钥,然后更新它们,然后想要恢复备份后我做的更新的情况。 (请注意,在Couchbase 4.0和4.1中意外删除了conflict_resolve标志,但将在4.1.1和4.5中重新添加)

    最后一点,我建议不要使用cbtranfer,因为它没有经过cbbackup和cbrestore的测试,而且该工具通常只作为最后的手段使用。