我们正在寻找 CouchdDB 的 CMS 应用程序。围绕备份我们的生产数据库有哪些常见模式、最佳实践和工作流程建议?
我对克隆数据库以用于开发和测试的过程特别感兴趣。
仅从实时运行的实例下复制磁盘上的文件就足够了吗?您可以在两个实时运行的实例之间克隆数据库数据吗?
非常感谢您对您使用的技术的建议和描述。
我们正在寻找 CouchdDB 的 CMS 应用程序。围绕备份我们的生产数据库有哪些常见模式、最佳实践和工作流程建议?
我对克隆数据库以用于开发和测试的过程特别感兴趣。
仅从实时运行的实例下复制磁盘上的文件就足够了吗?您可以在两个实时运行的实例之间克隆数据库数据吗?
非常感谢您对您使用的技术的建议和描述。
要注意的另一件事是,您可以从实时数据库中复制文件。鉴于您可能有一个可能很大的数据库,您可以将其 OOB 从您的测试/生产机器复制到另一台机器。
根据机器的写入负载,建议在复制后触发复制以收集复制文件时正在进行的任何写入。但是复制一些记录仍然比复制整个数据库要快。
CouchDB 支持复制,因此只需复制到另一个 CouchDB 实例并从那里备份,避免干扰您将更改写入的位置。
https://docs.couchdb.org/en/latest/maintenance/backups.html
你真的向你的 CouchDB 实例发送一个 POST 请求,告诉它复制到哪里,它可以工作(tm)
编辑:只要您可以接受 I/O 命中,您就可以从正在运行的数据库下 cp 出数据目录中的 .couch 文件。
我想支持 Paul 的建议:cp
如果您可以承受 I/O 负载的冲击,只需从实时服务器下获取您的数据库文件即可。如果您仍然运行复制副本,您也可以安全地从中复制,而不会影响您的主服务器的性能。
CouchDB 还可以很好地处理现代文件系统(如ZFS )提供的文件系统快照。由于数据库文件始终处于一致状态,您可以随时获取文件的快照,而不会削弱 CouchDB 提供的完整性保证。
这导致几乎没有 I/O 开销。如果您不小心从数据库中删除了一个文档,您可以将快照移动到另一台机器并在那里提取丢失的数据。您甚至可以复制回生产数据库,但我从未尝试过。
但始终确保在移动数据库文件时使用完全相同的 couchdb 修订版。磁盘格式仍在以不兼容的方式发展。
CouchDB 复制是可怕的。我通常会做tar,这要好得多。
.
确保获得以存档文件开头的子目录。scp
tar.gz 文件到目标主机并将它们解压缩到那里的临时位置。chown
文件到目标数据库目录中已经拥有文件的用户和组。这可能是 couchdb:couchdb。这很重要,因为弄乱文件权限是迄今为止我设法弄乱这个过程的唯一方法。cp
文件到目标目录。在我的主机上,这又是 /var/lib/couchdb。我通过 powershell 和PSCouchDB模块使用命令Export-CouchDBDatabase 来完成。
这会将整个数据库导出到一个 json 文件,您可以通过 import 命令重新导入该文件(请参阅链接)。
前任。
Export-CouchDBDatabase -Database test -Authorization "admin:password"
这会在当前目录中导出一个 json 文件:test_05-28-2021_17_01_00.json