在 Fauxton 中如何一次性复制作业从源库到目标库并验证复制状态为“completed”?
解读
国内大多数 CouchDB 集群部署在内网,面试官真正想考察的是:
- 你是否能在 Fauxton 图形界面 里一次性发起复制,而不是写脚本;
- 你是否知道 复制文档的必填字段 与 状态字段含义;
- 你是否能在 无 root 权限 的测试环境里,用只读账号就能验证结果。
一句话:既要“点得对”,又要“看得懂”。
知识点
- _replicator 系统库:所有复制任务都以普通 JSON 文档形式存在于此,字段写错直接 404 或 400。
- 一次性复制 vs 连续复制:一次性复制必须显式设置 "continuous": false(默认缺省就是 false,但写上更显专业)。
- 必填字段:source、target 必须是完整 URL 或本地库名;若源库需认证,source 里要嵌 "headers": {"Authorization": "Basic ..."}。
- 状态字段:_replicator 文档里实时回写的 "state" 字段 只有三种终态:"completed"、"failed"、"error";"triggered" 只是中间态。
- Fauxton 的 Replicator 向导:在 3.x 之后把“一次性”与“连续”两个单选按钮藏在了“Advanced Options”折叠面板里,很多候选人没展开就点“Replicate”,结果默认建了连续任务,状态一直跑不到 completed。
答案
- 登录 Fauxton,左上角切换至 “_replicator” 数据库。
- 点击 “Create Document”,手动输入如下一次性复制文档(示例把本地 db1 全量拉到 db2):
{
"_id": "job_一次性演示",
"source": "http://127.0.0.1:5984/db1",
"target": "http://127.0.0.1:5984/db2",
"continuous": false,
"create_target": false,
"owner": "your_user"
}
若源库需认证,把 source 改成:
"source": {
"url": "http://127.0.0.1:5984/db1",
"headers": {"Authorization": "Basic dXNlcjpwYXNz"}
}
- 保存后回到 “_replicator” 列表,刷新,看到刚建的文档,点进去。
- 等待 3–10 秒(视数据量),按 F5 强制刷新文档(Fauxton 不会自动轮询),直到 "state": "completed" 出现;若出现 "failed" 或 "error",展开 "history[0].reason" 查看具体报错。
- 切到 “target” 库,查看 “Database info” 中的 doc_count 与源库一致,即验证成功。
至此,一次性复制任务在 Fauxton 里发起并确认 completed 的全流程结束。
拓展思考
- 如果源库与目标库跨机房,网络抖动会导致状态卡在 "triggered",此时可在 "history" 数组里看 "start_time" 与 "last_update" 差值,超过 5 min 仍无 end_time 即可判定为 挂起,需检查 防火墙 5984 端口 与 证书链。
- 国内部分金融客户禁用 _replicator 写权限,只允许 POST /_replicate 旧端点;此时 Fauxton 向导会 403,需要提前向运维申请 replicator 角色。
- 大于 2 GB 的一次性复制,建议先在 源库做 _compact 并把 _revs_limit 降到 20,减少 历史版本 传输量,可把 completed 时间缩短 40% 以上。