【问题标题】:How to recover couchbase to the status of a backup?如何将沙发底座恢复到备份状态?
【发布时间】:2016-02-28 00:41:39
【问题描述】:

我使用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. 向社交桶添加两个新文档
    • ID: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 无法将数据库恢复到备份时间点。备份时间点之后的更改不会被删除。

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

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

【问题讨论】:

    标签: couchbase database-restore


    【解决方案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 一样经过测试,而且该工具通常仅作为最后的手段使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多