温馨提示×

MongoDB在Debian上的备份与恢复流程

小樊
37
2025-10-19 09:29:33
栏目: 云计算

MongoDB在Debian上的备份与恢复流程

一、备份流程

1. 安装MongoDB工具包

确保系统已安装mongodb-org-tools(包含mongodumpmongorestore等工具),若未安装可通过以下命令安装:

sudo apt update sudo apt install -y mongodb-org-tools 

2. 执行备份操作

基本逻辑备份(全量)

使用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/ 

3. 自动化备份(可选)

通过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 

添加cron任务

编辑当前用户的crontab文件:

crontab -e 

添加以下行(每日凌晨2点执行备份):

0 2 * * * /usr/local/bin/mongodb_backup.sh 

4. 备份注意事项

  • 权限设置:确保备份目录(如/backups/mongodb)的属主为mongodb用户,避免权限问题:
    sudo chown -R mongodb:mongodb /backups/mongodb 
  • 版本兼容性:备份文件与MongoDB版本需兼容(如10.0版本的备份文件无法在11.0版本中恢复),建议使用相同版本恢复。
  • 存储空间:定期清理旧备份文件(如保留近7天备份),避免磁盘空间耗尽。

二、恢复流程

1. 准备工作

停止MongoDB服务

恢复前需停止MongoDB服务,防止数据冲突:

sudo systemctl stop mongod 

备份现有数据(可选但强烈建议)

恢复前备份当前数据目录(默认/var/lib/mongodb),防止恢复失败导致数据丢失:

sudo cp -R /var/lib/mongodb /var/lib/mongodb-backup-$(date +%Y%m%d) 

2. 执行恢复操作

解压备份文件(若已压缩)

若备份文件为压缩格式,需先解压:

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 

使用oplog恢复(增量恢复)

若备份时启用了复制集且需要恢复到某一时间点,可使用--oplogReplay参数回放oplog:

mongorestore --db mydb --oplogReplay /tmp/mongodb_backup_20251019120000 
  • 此命令会恢复备份时间点之后的所有操作,实现“时间点恢复”。

3. 启动MongoDB服务

恢复完成后,启动MongoDB服务:

sudo systemctl start mongod 

4. 验证恢复结果

使用mongo shell连接数据库,检查数据是否恢复成功:

mongo use mydb show collections db.mycollection.find().pretty() 

5. 恢复注意事项

  • 停止写操作:恢复前需停止应用对数据库的写操作,避免恢复过程中数据被覆盖。
  • 数据一致性:确保备份文件完整且未被篡改,恢复前可通过mongodump --gzip验证备份文件的完整性。
  • oplog要求:使用--oplogReplay恢复时,备份必须包含oplog数据(仅复制集或分片集群支持)。

通过以上流程,可在Debian系统上实现MongoDB的安全备份与可靠恢复,确保数据的高可用性。

0