mongodb定时备份需组合mongodump、tar/gzip与scp或aws s3 cp,通过cron触发;关键包括安全认证(配置文件+600权限)、绝对路径、日志记录、上传验证及7天本地清理策略。

要实现 MongoDB 定时备份、压缩并上传到远程服务器或对象存储,核心是组合 mongodump、tar/gzip 和 scp 或 aws s3 cp 等命令,再通过 Cron 定期触发。关键在于权限、路径、错误处理和清理策略。
1. 编写可执行的备份脚本
新建脚本文件(如 /opt/scripts/mongo_backup.sh),赋予执行权限(chmod +x):
- 指定 MongoDB 连接参数(推荐使用配置文件或环境变量,避免明文密码)
- 用
mongodump导出到带时间戳的目录(如/backup/mongo_$(date +\%Y\%m\%d_\%H\%M)) - 用
tar -zcf打包压缩,生成.tar.gz文件 - 上传前验证压缩包完整性(
tar -tzf或gzip -t) - 上传失败时保留本地备份至少 24 小时,避免误删
2. 安全处理认证与权限
避免在命令行暴露密码:
- 创建 MongoDB 配置文件
/etc/mongobackup.conf,含host=、port=、username=、password=、authenticationDatabase=admin - 脚本中调用时加
--config /etc/mongobackup.conf参数 - 设置该配置文件权限为
600,仅 root 可读 - 确保运行脚本的用户对备份目录有读写权限,且能执行
mongodump
3. 配置 Cron 定时任务
编辑系统级 crontab(sudo crontab -e)或用户级(crontab -e):
- 每天凌晨 2 点执行:
0 2 * * * /opt/scripts/mongo_backup.sh >> /var/log/mongo_backup.log 2>&1 - 日志重定向很重要,便于排查失败原因(如权限拒绝、磁盘满、mongodump 超时)
- 避免在脚本中使用相对路径;所有路径用绝对路径(
/usr/bin/mongodump、/bin/tar) - Cron 默认 PATH 较窄,建议在脚本开头显式设置:
PATH=/usr/local/bin:/usr/bin:/bin
4. 上传目标与清理策略
根据目标选择上传方式,并控制本地留存:
- 传到远程 Linux 服务器:用
scp -o StrictHostKeyChecking=no+ 免密 SSH key(提前配置好) - 传到 AWS S3:
aws s3 cp backup.tar.gz s3://my-bucket/backups/ --storage-class STANDARD_IA - 传到阿里云 OSS:
ossutil cp backup.tar.gz oss://my-bucket/backups/ - 本地只保留最近 7 天的压缩包:
find /backup -name "mongo_*.tar.gz" -mtime +7 -delete - 上传成功后才删除原始 dump 目录,防止压缩失败导致数据丢失
不复杂但容易忽略细节,比如 mongodump 的 --oplog 参数可用于增量备份,但需副本集支持;小规模单机部署用全量+压缩+上传已足够可靠。











