bash
Database
MongoDB Backup Script
Automated MongoDB backup with compression, rotation, optional S3 upload, and email notifications on failure.
Apex Logic
0 copies
bash
#!/bin/bash
# MongoDB Backup Script with rotation and S3 upload
set -euo pipefail
DB_NAME="${MONGO_DB:-myapp}"
MONGO_URI="${MONGO_URI:-mongodb://localhost:27017}"
BACKUP_DIR="/backups/mongodb"
RETENTION_DAYS=14
S3_BUCKET="${S3_BUCKET:-}"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_PATH="${BACKUP_DIR}/${DB_NAME}_${DATE}"
mkdir -p "$BACKUP_DIR"
echo "[$(date)] Starting backup of $DB_NAME..."
# Create backup
mongodump --uri="$MONGO_URI" --db="$DB_NAME" --out="$BACKUP_PATH" --gzip
# Compress into single archive
ARCHIVE="${BACKUP_PATH}.tar.gz"
tar -czf "$ARCHIVE" -C "$BACKUP_DIR" "${DB_NAME}_${DATE}"
rm -rf "$BACKUP_PATH"
SIZE=$(du -h "$ARCHIVE" | cut -f1)
echo "[$(date)] Backup created: $ARCHIVE ($SIZE)"
# Upload to S3 if configured
if [ -n "$S3_BUCKET" ]; then
echo "Uploading to S3..."
aws s3 cp "$ARCHIVE" "s3://${S3_BUCKET}/mongodb/$(basename $ARCHIVE)" \
--storage-class STANDARD_IA
echo "Uploaded to s3://${S3_BUCKET}/mongodb/"
fi
# Rotate old backups
echo "Removing backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
REMAINING=$(ls -1 "$BACKUP_DIR"/*.tar.gz 2>/dev/null | wc -l)
echo "[$(date)] Backup complete. $REMAINING backups retained."
echo "---"
echo "Database: $DB_NAME"
echo "Archive: $ARCHIVE"
echo "Size: $SIZE"