You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kubernetes部署的MongoDB副本集中恢复备份?

如何将本地MongoDB备份恢复到Kubernetes中的MongoDB副本集

两种可行方案(无需强制进入Pod Shell)

你提到的进入Pod Shell是可选方案,但更高效的方式是直接本地远程连接恢复,以下是两种方案的详细操作:

方案一:本地直接远程连接副本集恢复(推荐)

MongoDB副本集只需要连接到**主节点(Primary)**执行恢复,主节点会自动将数据同步到所有副本节点(Secondary),无需逐个操作。

操作步骤:

  1. 获取副本集的连接信息:可以是K8s集群内部的Service地址(如果本地能打通集群网络),或者外部暴露的LoadBalancer/NodePort地址。
  2. 执行mongorestore命令,指定副本集连接字符串:
mongorestore -u adminUser --authenticationDatabase admin --gzip --archive=/tmp/file.gz \
  --uri="mongodb://adminUser:<你的密码>@<主节点IP>:27017,<副本节点IP>:27017/?authSource=admin&replicaSet=<副本集名称>"

注意:连接字符串中可以包含多个节点,MongoDB客户端会自动识别并连接到主节点;如果备份时指定了--db <dbname>,恢复时可以在URI末尾加上<dbname>来指定目标库。

方案二:进入Pod内部执行恢复(适合网络隔离场景)

如果本地无法直接访问K8s集群内的MongoDB,可通过kubectl将备份文件传入Pod后执行恢复:

  1. 把本地备份文件传到目标Pod:
kubectl cp /tmp/file.gz <目标Pod名称>:/tmp/file.gz -n mongodb
  1. 进入Pod的Shell环境:
kubectl exec -it <目标Pod名称> -n mongodb -- bash
  1. 在Pod内执行恢复命令(官方MongoDB镜像默认自带mongorestore工具):
mongorestore -u adminUser --authenticationDatabase admin --gzip --archive=/tmp/file.gz

注意:尽量选择主节点Pod执行恢复,避免因副本节点只读权限导致操作失败;恢复完成后,副本集会自动同步数据到其他节点。

副本集恢复的关键注意事项

  • 优先连接主节点:副本节点默认是只读状态,无法执行恢复操作,必须确保连接到主节点。
  • 可选:暂停故障转移:恢复前可在主节点执行rs.stepDown(600)(暂停600秒故障转移),避免恢复过程中主节点切换导致中断。
  • 权限验证:确保adminUser拥有restore和readWrite权限,否则会报错。

内容的提问来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 00:05:25