温馨提示×

centos mongodb备份恢复实践

小樊
47
2025-11-21 20:13:17
栏目: 云计算

CentOS 上 MongoDB 备份与恢复实践

一 环境准备与工具安装

  • 确认已安装 MongoDB 工具包(包含 mongodump/mongorestore)。如未安装,执行:sudo yum install -y mongodb-org-tools
  • 规划备份目录(示例:/backup/mongodb),并确保运行备份的用户对目录有读写权限。
  • 备份会产生较大 I/O网络 开销,建议在业务低峰期执行;如为生产环境,优先在副本集的 Secondary 节点上执行导出,降低对线上影响。

二 逻辑备份与恢复(mongodump/mongorestore)

  • 全量备份到目录(含时间戳)
    • 命令:mongodump --out /backup/mongodb/$(date +%Y-%m-%d_%H-%M-%S)
  • 备份单个库/集合
    • 命令:mongodump -d mydb -o /backup/mongodb
    • 命令:mongodump -d mydb -c users -o /backup/mongodb
  • 启用认证的备份
    • 命令:mongodump -h localhost -u myuser -p mypass --authenticationDatabase admin -o /backup/mongodb
  • 压缩归档(可选)
    • 打包:tar -czvf /backup/mongodb_$(date +%F).tar.gz -C /backup/mongodb ./
  • 恢复整个目录
    • 解压:tar -xzvf /backup/mongodb_2025-08-01.tar.gz -C /
    • 恢复:mongorestore /backup/mongodb_2025-08-01
  • 恢复到指定库/集合
    • 库级:mongorestore -d mydb /backup/mongodb_2025-08-01/mydb
    • 集合级:mongorestore -d mydb -c users /backup/mongodb_2025-08-01/mydb/users.bson
  • 远程/自动化
    • 远程拷贝:rsync -avz /backup/mongodb/ user@remote:/path/to/backup
    • 定时任务(每天 02:00 全量备份):
      • 0 2 * * * /usr/bin/mongodump --out /backup/mongodb/$(date +%Y%m%d)
  • 说明
    • 逻辑备份对业务影响小、跨版本/跨平台迁移友好;大数据量或严格 RPO 场景可结合“时间点恢复”。

三 时间点恢复(Oplog Replay)

  • 适用前提
    • 部署为 副本集分片集群,且 local.oplog.rs 可访问;备份时包含 –oplog 以捕获一致性点之后的操作。
  • 操作步骤
    1. 做包含 oplog 的基础备份
      • 命令:mongodump -u root -p 123456 --authenticationDatabase admin --oplog -o /tmp/bak
    2. local.oplog.rs 中定位误操作时间点(示例为删除集合)
      • 命令:db.getCollection(‘oplog.rs’).find({ns:“ceshi.$cmd”})
      • 关键字段:op:“c”(命令)、“drop”:“t1”、ts(时间戳)
    3. 导出基础备份时刻到误操作时刻之间的 oplog 片段
      • 命令:mongodump -u root -p 123456 --authenticationDatabase admin -d local -c oplog.rs -q ‘{ts:{$lt:Timestamp(1575793969,1),$gt:Timestamp(1575793846,1)}}’ -o /tmp/zl
    4. 启动临时实例(端口 27018),先导入基础备份并回放 oplog
      • 启动:mongod --dbpath /root/mtmp --logpath /root/mtmp/27018.log --port 27018 --bind_ip_all
      • 恢复:mongorestore --port 27018 --oplogReplay /tmp/bak
    5. 校验数据后,按需要导出/迁移回生产。
  • 说明
    • Oplog 具备近似幂等性,回放重复记录通常安全;务必确保导出 oplog 的时间窗覆盖从备份开始到目标恢复时刻。

四 自动化与保留策略

  • 备份脚本示例(含压缩与 7 天保留)
    • 文件:/data/backup/mongod.sh
      • 内容:
        • #!/bin/sh
        • DUMP=/usr/bin/mongodump
        • OUT_DIR=/data/backup/mongod/tmp
        • TAR_DIR=/data/backup/mongod
        • DATE=$(date +%Y_%m_%d_%H_%M_%S)
        • DB_USER=db_user; DB_PASS=db_pass; DAYS=7
        • TAR_BAK=“${TAR_DIR}/${DATE}.tar.gz”
        • mkdir -p ${OUT_DIR}/${DATE}
        • $DUMP -u $DB_USER -p $DB_PASS -o ${OUT_DIR}/${DATE}
        • tar -zcvf $TAR_BAK -C ${OUT_DIR} ./${DATE##*/}
        • find $TAR_DIR/ -mtime +$DAYS -type f -delete
    • 赋权与定时:chmod +x /data/backup/mongod.sh;crontab -e 添加:0 2 * * * root /data/backup/mongod.sh
  • 建议
    • 保留周期按 RPO/RTO 设定(如 7–30 天);定期做恢复演练与校验(校验集合计数、重要文档抽样)。

五 注意事项与常见问题

  • 权限与安全
    • 备份/恢复账号需具备相应角色(如 backup/restore 或更高);避免在脚本中明文存放密码,可使用 Keyfile 或外部凭据管理。
  • 服务与一致性
    • 逻辑导出通常无需停库;如采用文件拷贝方式做“物理恢复”,需先停库并备份当前数据目录,恢复后校正权限(chown -R mongod:mongod /var/lib/mongo)再启动。
  • 性能与影响
    • 大库导出建议在 Secondary 节点执行;限制并发与速率、选择低峰时段;压缩/传输与磁盘 I/O 需提前评估。
  • 版本与兼容性
    • mongodump/mongorestore 的版本尽量与目标实例一致;跨大版本恢复需先在测试环境验证。
  • 监控与告警
    • 对备份成功率、备份耗时、磁盘空间、保留天数设置监控与告警,确保可及时处置异常。

0