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?
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:
Adım 2: Sihirli Scriptimizi Yazıyoruz
`/usr/local/bin/` altında `automated_backup.sh` adında bir script dosyası oluşturacağız.
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:
Scripti kaydedip (`Ctrl+X`, `Y`, `Enter`) çalıştırılabilir yapalım:
Ö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:
(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:
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:
`/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:
3. KURTARMA PRATİĞİ YAPIN: Bu adım olmazsa olmaz! Bir test dizininde, yedeklenen bir dosyayı veya veritabanını geri yüklemeyi deneyin. Örneğin:
İleri Seviye İpuçları
İş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!
Selam sistemciler!
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
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
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
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.
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!