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

MongoDB副本集部署后仅在Secondary节点执行备份的Shell脚本

如何在MongoDB副本集的Secondary节点自动执行备份

我之前处理过不少这类副本集备份的需求,确实因为Primary/Secondary角色会动态切换,硬编码IP的方案根本不耐用,必须靠动态识别来解决。下面给你一套经过验证的实操方案:


核心思路

通过MongoDB内置的副本集状态查询命令,实时获取当前所有Secondary节点的信息,挑选合适的节点后远程执行备份操作,完全不需要人工干预角色变化。


1. 自动识别Secondary节点

可以用mongo shell命令直接查询副本集状态,筛选出状态为SECONDARY的节点。比如在脚本里执行这条命令:

# 获取所有Secondary节点的host:port列表(返回格式是数组字符串)
SECONDARY_LIST=$(mongo --eval "rs.status().members.filter(m => m.stateStr === 'SECONDARY').map(m => m.host)" --quiet)

# 提取第一个可用的Secondary节点(如果有多个,也可以按延迟排序选最优的)
TARGET_SECONDARY=$(echo $SECONDARY_LIST | awk -F'[",]' '{print $2}')

如果你的副本集开启了权限验证,记得加上--username和--password参数,比如:

SECONDARY_LIST=$(mongo --username your_user --password your_pwd --authenticationDatabase admin --eval "rs.status().members.filter(m => m.stateStr === 'SECONDARY').map(m => m.host)" --quiet)

2. 远程登录Secondary节点执行备份

拿到目标节点的host:port后,提取IP地址(如果是域名直接用域名也可以),然后通过SSH免密登录执行mongodump备份:

# 提取IP地址(拆分host和port)
SECONDARY_IP=$(echo $TARGET_SECONDARY | cut -d':' -f1)

# 执行mongodump备份(这里以备份指定数据库为例,按需调整参数)
ssh your_ssh_user@$SECONDARY_IP "mongodump \
  --db your_target_db \
  --out /data/backups/mongo_$(date +%Y%m%d_%H%M) \
  --readPreference secondary \
  --oplog"

这里的--oplog参数很重要(MongoDB 4.2+支持),它会记录备份期间的操作日志,让备份文件是时间点一致性的,恢复的时候能还原到备份完成的瞬间状态。

3. 优化与容错处理

  • 多Secondary节点选择:如果副本集有多个Secondary,建议选延迟最低的节点,避免备份影响业务:
    TARGET_SECONDARY=$(mongo --eval "rs.status().members.filter(m => m.stateStr === 'SECONDARY').sort((a,b) => a.msDelay - b.msDelay)[0].host" --quiet)
    
  • 免密SSH配置:确保执行脚本的机器能免密登录所有副本集节点,避免备份过程中需要输入密码。
  • 定时备份:把脚本加到crontab里,比如每天凌晨2点执行:
    0 2 * * * /path/to/your/mongo_backup_script.sh >> /var/log/mongo_backup.log 2>&1
    
  • 异常检测:脚本里可以加判断,如果没有找到Secondary节点,就发送告警邮件或者日志记录,避免备份失败没人知道:
    if [ -z "$TARGET_SECONDARY" ]; then
      echo "$(date): 未找到可用的Secondary节点,备份失败" >> /var/log/mongo_backup_error.log
      # 这里可以加邮件告警逻辑,比如用mail命令
      exit 1
    fi
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:45:56