确保系统已安装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的安全备份与可靠恢复,确保数据的高可用性。