首先安装mongodb-clients包(包含mongodump和mongorestore工具),并创建专用备份目录:
sudo apt update && sudo apt install -y mongodb-clients
sudo mkdir -p /backup/mongodb
mongodump是MongoDB官方推荐的逻辑备份工具,通过创建时间点快照备份数据(默认生成BSON格式文件)。
sudo mongodump --out /backup/mongodb/$(date +%Y%m%d_%H%M%S)
命令会在/backup/mongodb下创建以当前日期时间命名的子目录(如20251014_143000),存放所有数据库的备份文件。sudo mongodump --db your_database_name --out /backup/mongodb/$(date +%Y%m%d_%H%M%S)
sudo mongodump --db your_database_name --collection your_collection_name --out /backup/mongodb/$(date +%Y%m%d_%H%M%S)
tar命令减小存储占用(节省约50%-70%空间):sudo tar -czvf /backup/mongodb/$(date +%Y%m%d_%H%M%S).tar.gz -C /backup/mongodb $(date +%Y%m%d_%H%M%S)
--username、--password和--authenticationDatabase参数:sudo mongodump --username admin --password your_password --authenticationDatabase admin --out /backup/mongodb/$(date +%Y%m%d_%H%M%S)
通过crontab设置定期备份(如每天凌晨2点执行全量备份):
sudo crontab -e
添加以下内容(包含压缩步骤):
0 2 * * * /usr/bin/mongodump --out /backup/mongodb/$(date +\%Y\%m\%d_\%H\%M\%S) && /usr/bin/tar -czvf /backup/mongodb/$(date +\%Y\%m\%d_\%H\%M\%S).tar.gz -C /backup/mongodb $(date +\%Y\%m\%d_\%H\%M\%S)
保存后,Cron会自动执行备份任务。
若部署了MongoDB副本集,可通过--oplog参数实现增量备份(记录备份期间的所有操作),后续恢复时使用--oplogReplay重放操作:
sudo mongodump --oplog --out /backup/mongodb/incremental_$(date +%Y%m%d_%H%M%S)
注意:增量备份需配合全量备份使用(如每周一次全量备份+每日增量备份),以减少备份时间和存储空间。
恢复前需停止MongoDB服务,防止数据冲突;建议备份当前数据库(避免恢复失败导致数据丢失):
sudo systemctl stop mongod
sudo cp -R /var/lib/mongodb /var/lib/mongodb-backup_$(date +%Y%m%d)
mongorestore是MongoDB官方恢复工具,支持从mongodump生成的备份文件中还原数据。
sudo mongorestore /backup/mongodb/your_backup_directory/your_database_name
sudo mongorestore -d your_database_name -c your_collection_name /backup/mongodb/your_backup_directory/your_database_name/your_collection_name.bson
--drop参数(先删除现有数据库/集合,再恢复):sudo mongorestore --drop /backup/mongodb/your_backup_directory/your_database_name
若使用了增量备份(含Oplog),需先恢复全量备份,再用--oplogReplay重放增量操作:
# 1. 恢复全量备份
sudo mongorestore /backup/mongodb/full_backup_20251010/
# 2. 重放增量备份中的Oplog(恢复备份期间的操作)
sudo mongorestore --oplogReplay /backup/mongodb/incremental_20251010_143000/
恢复完成后,启动MongoDB服务并检查数据一致性:
sudo systemctl start mongod
mongo --eval "db.your_collection_name.find().count()" your_database_name
通过查询数据量或具体字段,确认恢复结果是否符合预期。
gpg加密tar包),防止物理损坏或未授权访问。cron日志或备份脚本的输出,监控备份任务是否成功(如备份文件大小是否为0),失败时发送邮件或短信告警。