确保系统已安装mongodb-org-tools(包含mongodump、mongorestore等工具),若未安装可通过以下命令安装:
sudo apt update
sudo apt install -y mongodb-org-tools
使用mongodump命令备份所有数据库,备份文件以BSON格式存储到指定目录(如/backups/mongodb):
mongodump --out /backups/mongodb/$(date +%Y%m%d%H%M%S)
--out:指定备份输出目录,目录名包含时间戳便于区分。若只需备份单个数据库(如mydb)或集合(如mycollection),可添加对应参数:
# 备份特定数据库
mongodump --db mydb --out /backups/mongodb/$(date +%Y%m%d%H%M%S)
# 备份特定集合
mongodump --db mydb --collection mycollection --out /backups/mongodb/$(date +%Y%m%d%H%M%S)
为节省存储空间,可使用tar命令压缩备份目录:
tar -czvf /backups/mongodb_$(date +%Y%m%d%H%M%S).tar.gz /backups/mongodb/$(date +%Y%m%d%H%M%S)
rm -rf /backups/mongodb/$(date +%Y%m%d%H%M%S) # 删除原始未压缩目录
若MongoDB启用了认证,需添加--username、--password及--authenticationDatabase参数;若备份到远程服务器,可通过scp传输:
# 认证备份
mongodump --username admin --password 123456 --authenticationDatabase admin --out /backups/mongodb/$(date +%Y%m%d%H%M%S)
# 远程传输(本地备份后传输到远程服务器)
scp /backups/mongodb_$(date +%Y%m%d%H%M%S).tar.gz user@remote_server:/remote/backups/
通过cron定时任务实现每日自动备份,步骤如下:
新建脚本文件(如/usr/local/bin/mongodb_backup.sh),内容如下:
#!/bin/bash
BACKUP_DIR="/var/backups/mongodb"
TIMESTAMP=$(date +"%Y%m%d%H%M%S")
BACKUP_FILE="$BACKUP_DIR/mongodb_backup_$TIMESTAMP.tar.gz"
LOG_FILE="/var/log/mongodb_backup.log"
# 创建备份目录(若不存在)
mkdir -p $BACKUP_DIR
# 执行备份并记录日志
echo "$(date '+%Y-%m-%d %H:%M:%S') Starting backup..." >> $LOG_FILE
mongodump --out=$BACKUP_DIR/$TIMESTAMP >> $LOG_FILE 2>&1
tar -czvf $BACKUP_FILE $BACKUP_DIR/$TIMESTAMP >> $LOG_FILE 2>&1
rm -rf $BACKUP_DIR/$TIMESTAMP >> $LOG_FILE 2>&1
if [ $? -eq 0 ]; then
echo "$(date '+%Y-%m-%d %H:%M:%S') Backup completed: $BACKUP_FILE" >> $LOG_FILE
else
echo "$(date '+%Y-%m-%d %H:%M:%S') Backup failed" >> $LOG_FILE
fi
sudo chmod +x /usr/local/bin/mongodb_backup.sh
编辑当前用户的crontab文件:
crontab -e
添加以下行(每日凌晨2点执行备份):
0 2 * * * /usr/local/bin/mongodb_backup.sh
/backups/mongodb)的属主为mongodb用户,避免权限问题:sudo chown -R mongodb:mongodb /backups/mongodb
恢复前需停止MongoDB服务,防止数据冲突:
sudo systemctl stop mongod
恢复前备份当前数据目录(默认/var/lib/mongodb),防止恢复失败导致数据丢失:
sudo cp -R /var/lib/mongodb /var/lib/mongodb-backup-$(date +%Y%m%d)
若备份文件为压缩格式,需先解压:
tar -xzvf /backups/mongodb_20251019120000.tar.gz -C /tmp # 解压到临时目录
使用mongorestore命令恢复备份目录中的所有数据库:
mongorestore /tmp/mongodb_backup_20251019120000
mongodb_backup_20251019120000),需指定该目录。mydb):mongorestore --db mydb /tmp/mongodb_backup_20251019120000/mydb
mycollection):mongorestore --db mydb --collection mycollection /tmp/mongodb_backup_20251019120000/mydb/mycollection.bson
若备份时启用了复制集且需要恢复到某一时间点,可使用--oplogReplay参数回放oplog:
mongorestore --db mydb --oplogReplay /tmp/mongodb_backup_20251019120000
恢复完成后,启动MongoDB服务:
sudo systemctl start mongod
使用mongo shell连接数据库,检查数据是否恢复成功:
mongo
use mydb
show collections
db.mycollection.find().pretty()
mongodump --gzip验证备份文件的完整性。--oplogReplay恢复时,备份必须包含oplog数据(仅复制集或分片集群支持)。通过以上流程,可在Debian系统上实现MongoDB的安全备份与可靠恢复,确保数据的高可用性。