温馨提示×

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

小樊
39
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