环境
- ubuntu 20.04
- mongodb 4.4.14
- 还没实际使用(20230922)后续到10月底如果有问题会修改
原理
- 只会在有新增数据时生成新的备份日期目录
- 备份恢复时,如果恢复的数据库未删除,则会覆盖数据
准备
准备一个文件夹,用于存放脚本
增量备份脚本 mongodb_incremental_backup.sh
#!/bin/bash
# MongoDB 主节点连接信息
MONGO_HOST="127.0.0.1"
MONGO_PORT="27017"
# 备份目录的基础路径
BACKUP_BASE_DIR="/home/kudoxi/temp/mongodb_bakup"
# 获取当前日期作为备份子目录名称(格式化为YYYYMMDD)
CURRENT_DATE=$(date +"%Y%m%d")
# 定义全量备份和增量备份目录
FULL_BACKUP_DIR="$BACKUP_BASE_DIR/full"
INCREMENTAL_BACKUP_DIR="$BACKUP_BASE_DIR/incremental_$CURRENT_DATE"
# 执行全量备份(仅第一次执行)
if [ ! -d "$FULL_BACKUP_DIR" ]; then
mongodump --host $MONGO_HOST --port $MONGO_PORT --out "$FULL_BACKUP_DIR"
else
# 执行增量备份
mongodump --host $MONGO_HOST --port $MONGO_PORT --out "$INCREMENTAL_BACKUP_DIR" --oplog
fi
# 检查备份是否成功
if [ $? -eq 0 ]; then
echo "Backup completed successfully."
else
echo "Backup failed. Please check the log for details."
fi
恢复备份脚本 mongodb_restore_backup.sh
#!/bin/bash
# MongoDB 服务器连接信息
MONGO_HOST="127.0.0.1"
MONGO_PORT="27017"
# 恢复目标数据库名称
TARGET_DB="info_system"
# 恢复目录的基础路径
RESTORE_BASE_DIR="/home/kudoxi/temp/mongodb_bakup"
# 恢复日期,假设您要恢复到某一天的状态 默认最新
RESTORE_DATE=$(date +"%Y%m%d") # 替换为实际日期
# 全量备份目录
FULL_BACKUP_DIR="$RESTORE_BASE_DIR/full"
# 增量备份目录
INCREMENTAL_BACKUP_DIR="$RESTORE_BASE_DIR/incremental_$RESTORE_DATE"
# 恢复全量备份
mongorestore --host $MONGO_HOST --port $MONGO_PORT --db $TARGET_DB "$FULL_BACKUP_DIR"
# 恢复每日增量备份
for INCREMENTAL_DIR in "$INCREMENTAL_BACKUP_DIR"/*; do
mongorestore --host $MONGO_HOST --port $MONGO_PORT --db $TARGET_DB "$INCREMENTAL_DIR"
done
# 检查恢复是否成功
if [ $? -eq 0 ]; then
echo "Database restore completed successfully."
else
echo "Database restore failed. Please check the log for details."
fi
备份
把脚本目录放到服务器后
- 修改实际备份存放路径
sudo vim mongo_incremental_backup.sh
保存退出
2. 给该路径可写入权限
sudo chmod +x mongo_incremental_backup.sh
- 定时增量
定时设置参考另一篇mysql增量备份
定时文件配置
crontab -e
30 10 * * * /bin/bash /home/kudoxi/temp/mongo_incremental_backup.sh
恢复
- 修改恢复脚本中待恢复数据库名称和备份路径
sudo vim mongodb_restore_backup.sh
- 执行恢复脚本
sudo bash mongodb_restore_backup.sh