Ana içeriğe geç

Database Backup Script 💾

Basit, güvenilir ve rotasyonlu (eskileri silen) yedekleme scripti.

Özellikler

  • Docker içindeki Postgres veya MySQL'i yedekler.
  • Yedekleri tarihli (db-2023-10-27.sql.gz) kaydeder.
  • Rotasyon: 7 günden eski dosyaları otomatik siler.
  • Sıkıştırma: Gzip ile yer tasarrufu sağlar.

Kullanım

nano /usr/local/bin/backup-db.sh
chmod +x /usr/local/bin/backup-db.sh

# Crontab (Her gece 02:00)
0 2 * * * /usr/local/bin/backup-db.sh

Kaynak Kod

#!/bin/bash
set -euo pipefail

# --- CONFIG ---
BACKUP_DIR="/var/backups/db"
CONTAINER_NAME="postgres_container_name"
DB_USER="postgres"
DB_NAME="myapp_db"
RETENTION_DAYS=7
DATE=$(date +%Y-%m-%d_%H%M)
# --------------

mkdir -p $BACKUP_DIR

echo "💾 Yedekleme Basliyor: $DATE"

# 1. Dump Al (Postgres)
# MySQL icin: docker exec $CONTAINER_NAME mysqldump -u... kullanin
docker exec -t $CONTAINER_NAME pg_dump -U $DB_USER $DB_NAME | gzip > "$BACKUP_DIR/db-$DATE.sql.gz"

# 2. Basari Kontrolu
if [ $? -eq 0 ]; then
    echo "✅ Yedek Basarili: $BACKUP_DIR/db-$DATE.sql.gz"
else
    echo "❌ Yedek ALINAMADI!"
    exit 1
fi

# 3. Rotasyon (Eskileri Sil)
echo "🗑️ $RETENTION_DAYS gunden eski yedekler siliniyor..."
find $BACKUP_DIR -name "db-*.sql.gz" -mtime +$RETENTION_DAYS -delete

# 4. (Opsiyonel) Offsite Copy
# 4. (Opsiyonel) Offsite Copy - Rclone
# Rclone config yapilmis olmali: `rclone config`
# rclone copy "$BACKUP_DIR/db-$DATE.sql.gz" remote:my-backups/ --quiet
# Veya klasoru senkronize et:
# rclone sync $BACKUP_DIR remote:my-backups/ --delete-after