我使用cbbackup
来备份couchbase
。然后对数据库执行一些操作,例如添加和删除文档。操作完成后,我想丢弃所有操作并将db恢复到备份状态。
我做了以下测试。 cbbackup和cbrestore在测试期间没有帮助。如何实现我的目标?
备份数据库
$ rm -rf /tmp/cbbackup
$ /opt/couchbase/bin/cbbackup http://cb_ip:8091 /tmp/cbbackup -u 'xxx' -p '***' -v
记住社交桶的项目数。
恢复社交信息桶
$ /opt/couchbase/bin/cbrestore /tmp/cbbackup http://cb_ip:8091 -u 'xxx' -p '***' -b mybucket -v
验证已删除的文档是否已恢复以及是否删除了添加的文档。
结论:cbrestore无法将db恢复到备份时间点。备份时间点之后的更改不会被删除。
使用cbtransfer恢复数据。结果和结论与cbrestore相同。
$ /opt/couchbase/bin/cbtransfer /tmp/cbbackup http://cb_ip:8091 -u 'xxx' -p '***' -b mybucket -v
答案 0 :(得分:2)
在我直接回答你的问题之前,让我解释一下有关cbbackup和cbrestore的两个重要概念。
这些工具在备份和还原过程中不会传输原始数据文件。在备份期间,数据流出服务器并写入磁盘,并且在恢复期间使用set操作将数据放入数据库。
Couchbase具有在集合期间进行冲突解决的能力。这意味着,如果您备份了密钥,然后对其进行了更新,然后执行恢复并启用冲突解决,则恢复期间的设置将被丢弃,因为它不是最新的更新。
以下是适用于您的用例的两种备份方案。
首先让我们来看看时间点恢复方案。为了实现这一点,您应该删除并重新创建您的存储桶,然后运行cbrestore。原因是cbrestore不会知道您在备份后添加的新密钥,并且无法删除它们。
让我们假设在另一种情况下,您只想强制使用您备份的数据覆盖存储桶中的所有数据。在这种情况下,您希望禁用冲突解决,并且可以使用“-x conflict_resolve = 0”标志执行此操作。这将适用于我备份1000个密钥,然后更新它们,然后想要恢复备份后我做的更新的情况。 (请注意,在Couchbase 4.0和4.1中意外删除了conflict_resolve标志,但将在4.1.1和4.5中重新添加)
最后一点,我建议不要使用cbtranfer,因为它没有经过cbbackup和cbrestore的测试,而且该工具通常只作为最后的手段使用。