一、mongodump 备份脚本
#!/bin/bash
# 每日全量备份 MongoDB,保留 7 天
################ 可改配置 ################
MONGO_HOST="localhost"
MONGO_PORT="27017"
MONGO_USER="" # 如未启用 auth 留空
MONGO_PASS="" #
AUTH_DB="admin" # 认证库,默认 admin
BACKUP_ROOT="/data/backup/mongo" #目录
LOG_FILE="/var/log/mongo_backup.log" #是文件不是目录
RETENTION_DAYS=7
#############################################
DATE=$(date +%F)
BACKUP_DIR="$BACKUP_ROOT/$DATE"
ARCHIVE="$BACKUP_DIR.tar.gz"
exec &> >(tee -a "$LOG_FILE")
echo "========== mongo backup start @ $(date) =========="
# 建目录
mkdir -p "$BACKUP_DIR"
# 拼装 auth 参数
AUTH_PARAMS=""
if [[ -n "$MONGO_USER" ]]; then
AUTH_PARAMS="-u $MONGO_USER -p$MONGO_PASS --authenticationDatabase $AUTH_DB"
fi
# 真正 dump
mongodump --host $MONGO_HOST --port $MONGO_PORT $AUTH_PARAMS \
--out "$BACKUP_DIR" --gzip
if [[ $? -ne 0 ]]; then
echo "ERROR: mongodump failed!"
exit 1
fi
# 打包并删除原目录
tar -czf "$ARCHIVE" -C "$BACKUP_ROOT" "$DATE" && rm -rf "$BACKUP_DIR"
echo "archive created: $ARCHIVE"
# 清理旧档
find "$BACKUP_ROOT" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
echo "========== mongo backup finish @ $(date) =========="
二,还原脚本 【mongorestore】
mongorestore \
--host 127.0.0.1 --port 16017 \
-u 你的备份账号 -p'你的密码' --authenticationDatabase admin \
--drop \ # 先删目标集合再导入,保证完全一致
/data/backup/mongo/2025-12-23