CouchDB转储到文件并从文件加载

时间:2012-07-24 21:24:41

标签: load couchdb backup dump database-backups

我不能在两个couchdb服务器之间复制,所以我想从一个服务器转储到文件并从文件加载到另一个服务器。

我使用此语句进行转储,并且工作正常:

curl -X GET http://localhost:5984/<DATABASE_NAME>/_all_docs?include_docs=true > FILE.txt

但是当我使用这个语句加载时:

curl -d @FILE.txt -H “Content-Type: application/json” -X POST http://localhost:5984/<DATABASE_NAME>/_bulk_docs

它失败了:

curl: (6) Could not resolve host: application; Host not found {"error":"bad_content_type","reason":"Content-Type must be application/json"}

有什么想法吗?

5 个答案:

答案 0 :(得分:15)

如上所述,您应该使用"而不是作为-H选项的参数

如果您是Linux或MacOSX用户,可以使用couchdb-dump工具,该工具基本适用于bash shell。

它将数据库转储到本地文件(ASCII文本文件)上,格式符合http://wiki.apache.org/couchdb/HTTP_Bulk_Document_API的请求

然后,您可以使用批量文档上载或包中包含的couchdb-dump还原工具来恢复它。

这是该工具的链接:https://github.com/animamea/couchdb-dump

但你也可以找到其他工具:

https://github.com/stockr-labs/couchdbdump

https://github.com/zebooka/couchdb-dump

答案 1 :(得分:9)

您可以使用以下命令行将curl命令的输出转换为var preferences = new Preferences() { Section = xDoc.Root.Elements("section").Select(x => new Section() { Name = x.Attribute("name").Value, Preference = x.Elements("preference").Select(y => new Preference() { Name = y.Attribute("name").Value, Default = (bool)y.Element("default").Attribute("value"), }).ToList(), }).ToList() }; 所需的“docs”结构:

_bulk_docs

jq是一个非常有用的优秀命令行处理器的名称(即在这种情况下)。

希望它有所帮助。

答案 2 :(得分:7)

您实际出错的原因是您在命令行的参数周围使用"而不是纯ASCII -H

但是,这里的真正解决方案是将<DATABASE_NAME>.couch目录从/path/to/var/lib/couchdb目录从一台服务器复制到另一台服务器。

答案 3 :(得分:2)

作为替代解决方案,您可以使用couchdb-python项目中的couchdb-loadcouchdb-dump实用程序。

答案 4 :(得分:1)

来自PouchDB团队的Nolan制作了一些很棒的工具。这些可以很好地从CouchDB(包括附件)转储和加载:

<强>转储/备份

https://github.com/nolanlawson/pouchdb-dump-cli

<强>装入/还原:

https://github.com/nolanlawson/pouchdb-load