CouchDB备份和克隆数据库

38

我们正在寻找在CMS应用程序中使用CouchdDB。关于备份我们的生产数据库,有哪些常见模式、最佳实践和工作流建议?

我特别关注在开发和测试中克隆数据库的过程。

只从运行中的实例下面复制磁盘上的文件是否足够?您可以在两个运行中的实例之间克隆数据库数据吗?

非常感谢您提供的技术建议和描述。

6个回答

37

需要注意的另一件事情是,您可以在正在运行的数据库下复制文件。考虑到您可能具有一个可能很大的数据库,您可以将其从测试/生产机器直接复制到另一台机器。

根据机器的写入负荷,建议在复制后触发复制以收集在复制文件时进行的任何写入。但是,复制几条记录仍然比复制整个数据库快。

参考文献:http://wiki.apache.org/couchdb/FilesystemBackups


1
“你可以在数据库运行时复制文件。” - 这是非常好的建议,我正在寻找复制数据库的方法,发现我可以在Finder中复制并重命名.couch文件来完成这个任务。 - DigitalDesignDj

32
CouchDB支持复制,因此只需将其复制到另一个CouchDB实例并从那里进行备份,避免干扰您写入更改的位置。

https://docs.couchdb.org/en/latest/maintenance/backups.html

你只需向CouchDB实例发送POST请求,告诉它要复制到哪里,就可以实现操作(商标)。
编辑:只要你能承受I/O的影响,你可以从正在运行的数据库下的数据目录中复制出.couch文件。

7
CouchDB也可以很好地与现代文件系统(如ZFS)提供的文件系统快照配合使用。由于数据库文件始终处于一致状态,因此您可以随时对文件进行快照,而不会削弱CouchDB提供的完整性保证。
这几乎不会产生I/O开销。如果您意外删除了数据库中的文档,您可以将快照移动到另一台计算机并在那里提取缺失的数据。您甚至可以尝试复制回生产数据库,但我从未尝试过。
但是,请确保在移动数据库文件时使用完全相同的couchdb修订版本。磁盘上的格式仍在以不兼容的方式发展。

7

我想支持Paul的建议:如果你能承受I/O负载的打击,只需从活动服务器下方的数据库文件中复制cp即可。如果您已经运行了一个副本,那么您也可以安全地从中复制,而不会影响主服务器的性能。


1
CouchDB复制很糟糕。通常我会使用tar,它更好一些。
  1. 停止源主机上的CouchDB服务。
  2. 压缩数据文件(tar.gz)。
  3. 在我的Ubuntu服务器上,这通常位于 /var/lib/couchdb(有时是基于Couch版本的子目录中)。如果您不确定这些文件在哪里,可以在CouchDb配置文件中找到路径,或者通过执行 ps -A w 命令来查看启动CouchDb的完整命令。在归档文件时,请确保获取以 . 开头的子目录。
  4. 重新启动源主机上的couchdb服务。
  5. scp tar.gz 文件到目标主机,并在那里的临时位置解压缩它们。
  6. chown 文件的用户和组与目标数据库目录中已拥有的文件相同。这很重要,因为弄乱文件权限是我迄今为止唯一搞砸这个过程的方法。
  7. 停止目标主机上的CouchDB。
  8. cp 文件到目标目录中。在我的主机上,这又是 /var/lib/couchdb。
  9. 在新位置再次检查文件权限。
  10. 重新启动目标主机上的CouchDB。

6
复制(Replication)是CouchDB真正擅长的事情,这也是其基于修订的文档设计的全部意义所在。如果您不需要复制功能,那我会认真质疑为什么您要使用它。此外,您无需停止CouchDB即可复制文件(参考:http://wiki.apache.org/couchdb/FilesystemBackups)。 - slang
1
哈哈,不是CouchDB开发人员 - 我只是在VICE的一些内部分析系统中使用它。而且20GB不应该是问题 - 如果你遇到了崩溃,我会将其报告给Apache作为一个bug。 - slang
1
我认为有些情况下这是一个有效的答案,例如当您安装使用CouchDB的某些内容时,或者在非常大的数据库的新复制节点上,HTTP请求是不必要的负担。没有万能的解决方案。顺便说一句,在Centos 6.6上,数据库文件位于/usr/local/var/lib/couchdb - evalarezo

0

我使用PowerShell和PSCouchDB模块,通过命令Export-CouchDBDatabase来完成。

这将整个数据库导出为JSON文件,您可以通过导入命令(请参见链接)重新导入它。

例如:

Export-CouchDBDatabase -Database test -Authorization "admin:password"

这将在当前目录中导出一个JSON文件:test_05-28-2021_17_01_00.json


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接