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