我正在couchdb 1.1.0中创建一个“拉”复制器文档:
curl -X PUT http://admin:pass@localhost:5984/_replicator/maintenance -d '
{
"_id": "maintenance",
"source": "http://other.host:5984/maintenance",
"target": "maintenance",
"create_target": true
}'
现在我检查复制状态:
curl -X GET http://admin:pass@localhost:5984/_replicator/maintenance
{"_id":"maintenance","_rev":"2-0f25f80a2726640944d527d6035e5b80","source":"http://other.host:5984/","target":"maintenance","create_target":true,"_replication_state":"error","_replication_state_time":"2011-09-06T02:35:10+02:00","_replication_id":"354746bf47831195261bf54f3cb6136b"}
出了点问题,但我不知道是什么。我甚至手动创建了数据库,但它仍然无法正常工作。关于问题可能出现的任何想法?
答案 0 :(得分:4)
事实证明我使用了错误的url来启动复制。而不是
curl -X PUT http://admin:pass@localhost:5984/_replicator/maintenance
我必须这样做:
curl -X POST http://admin:pass@localhost:5984/_replicate -H ...
现在复制按预期开始。它甚至可以通过create_target和continuous来触发,并且工作正常。
我仍然遇到一些问题:如何列出活动复制?它们未列在localhost:5984/_replicator
中,而网址localhost:5984/_replicate
仅列出了POST请求。如何取消连续复制?
最后:拥有两个不同的网址,一个localhost:5984/_replicate
和一个localhost:5984/_replicator
的目的是什么?
答案 1 :(得分:2)
source属性错误,您必须添加远程数据库:
"source": "http://other.host:5984/maintenance"
应该有用!
干杯,伯恩哈德
答案 2 :(得分:0)
我怀疑你需要在other.host进行身份验证(例如,它可能有require_valid_user = true);
"source":"http://user:pass@other.host:5984/maintenance"
您可能希望锁定对_replicator数据库的访问权限,因为数据库的任何读者都可以看到该密码(使用_security文档将其锁定)。
加强这一点是CouchDB未来版本讨论的一个活跃主题。
答案 3 :(得分:0)
_replicator 是用于在CouchDB重新启动后记住复制的新格式。如果使用此格式,则只需删除复制文档即可取消复制。
答案 4 :(得分:0)
当我遇到此错误时:
[星期一,2011年9月12日16:45:05 GMT] [错误] [< 0.4323.3>]启动复制错误'045020f93f9da91e1e6b609754b32a15 + create_target'(文档'维护'):{unauthorized,<<“未经授权访问数据库维护“>>}。在160秒内重试
实际问题是我在JSON中指定了create_target:true,但数据库已经存在。我相信如果目标已经存在,之前create_target可以安全使用,但不能在_replicator / model中使用。