Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

Ubuntu Sunucuda Tam Otomatik Yedekleme ve Kurtarma Sistemi Kurulum Rehberi 💾

webnix

Üye
Katılım
14 Mart 2026
Mesajlar
8
Ubuntu Sunucuda Tam Otomatik Yedekleme ve Kurtarma Sistemi Kurulum Rehberi 💾

Selam sistemciler! 🖥️ Bugün, hepimizin "keşke yapsaydım" dediği ama genellikle bir felaket yaşanana kadar ertelediği o kritik konuya değiniyoruz: otomatik yedekleme. Veri kaybı, disk arızası veya yanlışlıkla `rm -rf` çalıştırmak... Hepsi başımıza gelebilir. Bu rehberde, basit bir bash scripti, güçlü `rsync` ve sadık dostumuz `cron` ile, sunucunuzu kendi kendine yedekleyen ve eski yedekleri temizleyen bir sistem kuracağız. Hadi terminalin tozunu alalım! ⚙️

Neden Bu Yöntemi Seçmeliyiz?
  • Basit ve Hafif: Ekstra bir yazılım yüklemenize gerek yok. Ubuntu'nun temel araçları yeterli.
  • Esnek: Yedeklemek istediğiniz her şeyi (web dosyaları, veritabanları, konfigürasyonlar) özelleştirebilirsiniz.
  • Güvenilir: `rsync`, sadece değişen dosyaları kopyalayarak bant genişliği ve disk alanından tasarruf sağlar.
  • Otomatik: `cron` sayesinde siz uyurken yedekleriniz alınır.

Adım 1: Senaryomuzu ve Dizinleri Hazırlayalım
Öncelikle, yedeklerimizi nereye alacağımıza karar verelim. İkinci bir disk, NFS paylaşımı veya başka bir sunucu olabilir. Bu örnekte, sunucuda ayrı bir bölüm olan `/mnt/backup_drive` yolunu kullanacağız.

Terminalde aşağıdaki komutlarla yedek dizinimizi oluşturalım:
Bash:
sudo mkdir -p /mnt/backup_drive/server_backups
sudo chown -R $USER:$USER /mnt/backup_drive/server_backups

Adım 2: Sihirli Scriptimizi Yazıyoruz
`/usr/local/bin/` altında `automated_backup.sh` adında bir script dosyası oluşturacağız.

Bash:
sudo nano /usr/local/bin/automated_backup.sh

Açılan editöre aşağıdaki script içeriğini yapıştırın. Açıklama satırlarıyla ne yaptığını anlatmaya çalıştım:

Bash:
#!/bin/bash

# --- Yapılandırma Değişkenleri (Bunları kendinize göre düzenleyin!) ---
BACKUP_ROOT="/mnt/backup_drive/server_backups"
SOURCE_DIRS=("/var/www/html" "/etc" "/home") # Yedeklenecek dizinler
MYSQL_USER="mysql_kullanici_adiniz" # MySQL yedekleme için kullanıcı
MYSQL_PASSWORD="mysql_sifreniz" # MySQL şifresi (Dikkatli olun!)
MYSQL_DATABASES=("veritabani1" "veritabani2") # Yedeklenecek DB'ler
RETENTION_DAYS=7 # Kaç günlük yedeği saklayacağız?

# --- Scriptin geri kalanına dokunmayın ---
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="$BACKUP_ROOT/backup_$DATE"

echo "[$(date)] Yedekleme işlemi başlıyor: $BACKUP_DIR"

# 1. Yedek dizinini oluştur
mkdir -p "$BACKUP_DIR"

# 2. Dosya ve Dizinleri rsync ile yedekle
for DIR in "${SOURCE_DIRS[@]}"; do
    if [ -d "$DIR" ]; then
        echo "  -> Yedekleniyor: $DIR"
        rsync -a --delete "$DIR" "$BACKUP_DIR/files/" 2>/dev/null
    else
        echo "  -> UYARI: $DIR dizini bulunamadı, atlanıyor."
    fi
done

# 3. MySQL Veritabanlarını Yedekle (Eğer MySQL kuruluysa)
if command -v mysqldump &> /dev/null && [ -n "$MYSQL_USER" ]; then
    echo "  -> MySQL veritabanları yedekleniyor..."
    mkdir -p "$BACKUP_DIR/mysql"
    for DB in "${MYSQL_DATABASES[@]}"; do
        mysqldump -u"$MYSQL_USER" -p"$MYSQL_PASSWORD" --single-transaction "$DB" > "$BACKUP_DIR/mysql/${DB}_${DATE}.sql" 2>/dev/null
        if [ $? -eq 0 ]; then
            echo "     [OK] $DB"
        else
            echo "     [HATA] $DB yedeklenemedi."
        fi
    done
fi

# 4. Eski Yedekleri Temizle (Retention Policy)
echo "  -> $RETENTION_DAYS günden eski yedekler temizleniyor..."
find "$BACKUP_ROOT" -name "backup_*" -type d -mtime +$RETENTION_DAYS -exec rm -rf {} \; 2>/dev/null

echo "[$(date)] Yedekleme işlemi tamamlandı: $BACKUP_DIR"
echo "----------------------------------------"

Scripti kaydedip (`Ctrl+X`, `Y`, `Enter`) çalıştırılabilir yapalım:
Bash:
sudo chmod +x /usr/local/bin/automated_backup.sh

ÖNEMLİ UYARI: Scriptteki `MYSQL_USER` ve `MYSQL_PASSWORD` alanlarını kendi bilgilerinizle değiştirin. Bu şifrenin scriptte düz metin olmaması için MySQL'de sadece yedekleme yetkisi olan özel bir kullanıcı oluşturmanızı şiddetle tavsiye ederim. 🛡️

Adım 3: Cron ile Otomasyonu Sağlayalım
Artık scriptimiz hazır. Şimdi onu her gece 02:00'de çalıştıracak bir cron job'ı ekleyelim.

Cron tablosunu düzenlemek için:
Bash:
crontab -e
(Eğer ilk defa yapıyorsanız, hangi editörü kullanmak istediğinizi sorabilir, `nano` seçebilirsiniz.)

Dosyanın en altına şu satırı ekleyin:
Bash:
# Her gün saat 02:00'de otomatik yedekleme scriptini çalıştır.
0 2 * * * /usr/local/bin/automated_backup.sh >> /var/log/auto_backup.log 2>&1
Bu satır, scriptin çıktısını `/var/log/auto_backup.log` dosyasına yönlendirerek ne olduğunu takip etmemizi sağlar.

Adım 4: Test ve Kurtarma Pratiği (En Önemli Kısım!)
Sistem kuruldu ama işe yarıyor mu? Hemen test edelim.

1. Scripti Manuel Çalıştırma:
Bash:
/usr/local/bin/automated_backup.sh
`/mnt/backup_drive/server_backups/` altında `backup_[TARIH_SAAT]` şeklinde bir klasör oluştuğunu kontrol edin.

2. Log Dosyasını Kontrol Etme:
Bash:
tail -f /var/log/auto_backup.log

3. KURTARMA PRATİĞİ YAPIN: Bu adım olmazsa olmaz! Bir test dizininde, yedeklenen bir dosyayı veya veritabanını geri yüklemeyi deneyin. Örneğin:
Bash:
# Dosyaları geri yüklemek için rsync'i ters yönde kullanabilirsiniz.
rsync -a /mnt/backup_drive/server_backups/backup_20231015_0200/files/var/www/html/ /var/www/html_test_geri_yukleme/
# MySQL veritabanını geri yüklemek:
mysql -u root -p veritabani1 < /mnt/backup_drive/server_backups/backup_20231015_0200/mysql/veritabani1_20231015_0200.sql

İleri Seviye İpuçları
  • Şifre Güvenliği: MySQL şifresini scriptte saklamak istemezseniz, `.my.cnf` dosyasında yetkilendirme yapabilir veya şifreyi ayrı bir güvenli dosyadan okutabilirsiniz.
  • Uzak Sunucuya Yedekleme: `BACKUP_ROOT` değişkenini `user@uzak_sunucu_ip:/path/to/backup` şeklinde ayarlayıp, SSH key-based authentication kurarak yedekleri uzak sunucuya gönderebilirsiniz.
  • Bildirim: Scriptin sonuna `mail` veya `curl` komutu ekleyerek yedeklemenin başarılı/başarısız olduğuna dair e-posta/telegram bildirimi alabilirsiniz.
  • Sıkıştırma: Çok yer kaplıyorsa, `rsync` sonrası `tar` ve `gzip` ile yedek klasörünü sıkıştırabilirsiniz.

İşte bu kadar! Artık sunucunuz, siz farkında bile olmadan, kendini düzenli olarak yedekliyor. 💾 Bu sistem, küçük ve orta ölçekli projeler için oldukça yeterli. Unutmayın, yedekleme stratejinizin gerçekten işe yaradığından emin olmanın tek yolu, düzenli olarak geri yükleme testleri yapmaktır.

Peki ya siz? Sunucularınızı yedeklemek için hangi yöntemleri veya araçları kullanıyorsunuz? Önerileriniz ve kendi scriptleriniz varsa yorumlarda paylaşmayı unutmayın!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri