阅读量:34
1. 手动备份(使用mongodump工具)
mongodump是MongoDB自带逻辑备份工具,可导出指定数据库或集合的数据及元数据(如索引、用户权限)。基本命令示例:
- 全量备份所有数据库:
mongodump --host localhost --port 27017 -u root -p 123456 --authenticationDatabase admin --out /backup/mongodb - 备份特定数据库:
mongodump --db your_database --out /backup/mongodb/$(date +%Y%m%d) - 备份特定集合:
mongodump --db your_database --collection your_collection --out /backup/mongodb
手动备份适合临时数据保存或小规模环境,需手动执行命令,灵活性高但自动化程度低。
2. 定时自动备份(结合Crontab)
通过crontab设置定时任务,自动执行备份脚本,实现定期自动备份。步骤如下:
- 编写备份脚本(如
/home/crontab/mongod.sh),包含mongodump命令、压缩(tar -czvf)及过期备份清理(find /backup/mongodb -mtime +7 -delete,删除7天前备份)逻辑; - 赋予脚本执行权限:
chmod +x /home/crontab/mongod.sh; - 编辑crontab:
crontab -e,添加定时任务(如每天凌晨2点执行:0 2 * * * /home/crontab/mongod.sh)。
定时备份实现了备份自动化,减少人工干预,适合大多数生产环境。
3. 物理备份(使用Percona XtraBackup)
Percona XtraBackup是开源物理备份工具,直接复制MongoDB数据文件(如/var/lib/mongo),无需停止服务(支持热备份),适合大规模数据或对备份速度要求高的场景。步骤如下:
- 安装工具:
sudo yum install percona-xtrabackup-24; - 执行备份:
innobackupex --user=root --password=123456 --host=localhost --port=27017 /backup/mongodb; - 准备备份(使数据一致):
innobackupex --apply-log /backup/mongodb; - 恢复数据:
innobackupex --copy-back /backup/mongodb(需停止MongoDB服务)。
物理备份速度快、恢复时间短,但占用存储空间较大,适合需要快速恢复的生产环境。
4. 增量备份(基于Oplog或rsync)
增量备份仅备份自上次备份以来变化的数据,节省存储空间和备份时间。常见方法:
- 基于Oplog(适用于副本集):
- 先做全量备份(
mongodump); - 记录全量备份的oplog时间戳(
mongosh --eval 'db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts'); - 增量备份(
mongodump --db local --collection oplog.rs --query '{"ts": {"$gt": Timestamp(上次时间戳, 1)}}' --out /backup/incremental)。
- 先做全量备份(
- 基于rsync(适用于单机):
使用rsync同步MongoDB数据目录(/var/lib/mongo)到备份目录,仅复制变化的文件:rsync -av --delete /var/lib/mongo/ /backup/mongodb/$(date +%Y%m%d)。
增量备份需配合全量备份使用(恢复时需先还原全量备份,再应用所有增量备份),适合数据变化频繁的场景。
5. Docker容器环境下的自动备份
若MongoDB部署在Docker容器中,可通过在容器内安装cron服务实现自动备份。步骤如下:
- 进入容器:
docker exec -it mongodb_container /bin/bash; - 安装cron:
yum install -y cronie; - 创建备份脚本(如
/backup/mongod.sh),内容同普通定时脚本; - 添加定时任务:
echo "0 2 * * * /backup/mongod.sh" > /etc/cron.d/mongod_cron; - 启动cron服务:
service cron start。
Docker环境下自动备份无需修改宿主机配置,适合容器化部署的场景。
6. 备份管理与验证
无论采用哪种备份策略,都需做好备份管理与验证:
- 备份存储:将备份文件存储在安全位置(如网络存储、云存储),避免单点故障;
- 备份清理:定期删除过期备份(如通过
find命令),节省存储空间; - 备份验证:定期使用
mongorestore --dryRun模拟恢复过程,检查备份文件的完整性和可恢复性(如mongorestore --dryRun /backup/mongodb/20250101)。
备份管理是确保数据可恢复的关键环节,需纳入日常运维流程。