我无法在两个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"}
有什么想法吗?
6条答案
按热度按时间i7uq4tfw1#
如上所述,应该使用
"
而不是“
作为-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
lnlaulya2#
您可以使用以下命令行将curl命令的输出转换为
_bulk_docs
所需的“docs”结构:jq是一个优秀的命令行处理器的名字,非常有用(即在这种情况下)。
希望能有所帮助。
6mzjoqzu3#
实际错误的原因是,在命令行中,您在
-H
参数周围使用的是“
,而不是纯ASCII"
。但是,这里真实的的解决方案是将
<DATABASE_NAME>.couch
文件从一台服务器的/path/to/var/lib/couchdb
目录复制到另一台服务器。8dtrkrch4#
作为替代解决方案,您可以使用couchdb-python项目中
couchdb-load
和couchdb-dump
实用程序odopli945#
来自PouchDB团队的Nolan制作了一些很棒的工具。这些工具可以很好地从CouchDB中转储和加载(包括附件):
转储/备份:
https://github.com/nolanlawson/pouchdb-dump-cli
载入/还原:
https://github.com/nolanlawson/pouchdb-load
xxhby3vn6#
还有github.com/danielebailo/couchdb-dump,它可能有助于清除旧的 transient ,作者说:
我们已经看到15 GB的数据库文件,只包含2.1GB的原始JSON,在导入后减少到磁盘上的2.5GB!
如果您想同步集群,这里也有关于update_seq如何工作的提示。