Ana içeriğe atla
Bu script, MongoDB veritabanının yedeğini alır ve /opt/mongoyedek klasöründe saklar. Birden fazla yedek varsa, en yeni 2 tanesini tutar ve diğerlerini siler.
Eski yedeklerin çok fazla sayıda olması ya da silinmemesi durumunda sunucunun diskini doldurmamak için ya yedekleri alacağınız adrese ayrı bir disk alanı tanımlatın ya da yedekleri sunucu haricinde bir yere taşımayı da gözden geçirin.
Script için belirtilen ‘Ip,Username,Password’ alanlarını kendi Db bilgilerinize göre düzenleyiniz.
sudo vi mongodump.sh
#!/bin/bash

IP_ADDRESS="{Ip}"
USERNAME="{Username}"
PASSWORD="{Password}"
PORT="25080"
BACKUP_DIR="/opt/mongoyedek"

# Yedekleme Klasörünü Kontrol Et ve Oluştur
if [ ! -d "$BACKUP_DIR" ]; then
    sudo mkdir -p "$BACKUP_DIR"
    sudo chown $USER:$USER "$BACKUP_DIR"
fi

# Dosya ismini belirle ve numara ekle
DATE=$(date +%F)  
BASE_NAME="apinizer-backup-${DATE}"
index=0

# Aynı gün içinde mevcut dosyaları kontrol et ve uygun bir numara belirle
while [ -e "${BACKUP_DIR}/${BASE_NAME}-${index}.archive" ]; do
    index=$((index + 1))
done

BACKUP_PATH="${BACKUP_DIR}/${BASE_NAME}-${index}.archive"

# Son 2 dosyayı tutmak için dosya isimlerini al ve sil
files_to_keep=$(ls -lt "$BACKUP_DIR"/*.archive | head -n 2 | awk '{print $9}')
all_files=$(ls -lt "$BACKUP_DIR"/*.archive | awk '{print $9}')
files_to_delete=$(comm -23 <(echo "$all_files" | sort) <(echo "$files_to_keep" | sort))

for file in $files_to_delete; do
    echo "Siliniyor: $file"
    sudo rm -f "$file"
done


sudo mongodump --host "$IP_ADDRESS" --port="$PORT" --username="$USERNAME" --password="$PASSWORD" --authenticationDatabase=admin --gzip --archive="$BACKUP_PATH"

echo "Yedekleme tamamlandı: $BACKUP_PATH"
sudo chmod +x mongodump.sh
./mongodump.sh
Dilerseniz scriptin belirli bir zamanda ya da zaman periyodunda çalıştırılmasını sağlayabilirsiniz. Bunun için cron kullanılabilir.
sudo crontab -e
Açılan dosyanın içine alttaki satırı ekleyiniz.
59 23 1 * * /path/mongodump.sh
Örnek kulllanımda her ayın 1. günü saat 23:59 da script çalışacaktır.