Veritabanı & DevOps

Backup Stratejileri: Veritabanı ve Dosya Yedekleme

Fatih Algül
22.03.2026 361 görüntülenme

Neden Yedekleme Stratejisi Şarttır?

Veri kaybı, bir sistem yöneticisinin veya geliştiricinin başına gelebilecek en yıkıcı olaylardan biridir. Donanım arızaları, insan hataları, ransomware saldırıları veya doğal afetler gibi pek çok farklı senaryo, kritik verilerinizi bir anda yok edebilir. Bu nedenle sağlam bir yedekleme stratejisi oluşturmak, her ölçekteki proje için zorunluluktur. "Yedekleme yapmayan değil, yedeklemesini test etmeyen kaybeder" sözünü asla unutmayın.

Yedekleme Türleri

1. Tam Yedekleme (Full Backup)

Tüm verilerin eksiksiz bir kopyasının alınmasıdır. Geri yükleme süresi en kısa olan yöntemdir ancak en fazla disk alanı ve zaman gerektirir. Haftalık tam yedekleme alıp aradaki günleri artımlı yedeklerle doldurmak yaygın bir pratiktir.

2. Artımlı Yedekleme (Incremental Backup)

Sadece son yedeklemeden bu yana değişen verileri kopyalar. Depolama alanından büyük ölçüde tasarruf sağlar, ancak geri yükleme sırasında tam yedek + tüm artımlı yedeklerin sırasıyla uygulanması gerekir.

3. Diferansiyel Yedekleme (Differential Backup)

Son tam yedeklemeden bu yana değişen tüm verileri kopyalar. Artımlı yedeklemeye göre daha fazla alan kullanır, ancak geri yükleme daha hızlıdır çünkü yalnızca tam yedek + son diferansiyel yedek yeterlidir.

Veritabanı Yedekleme Stratejileri

MySQL / MariaDB Yedekleme

MySQL için en yaygın araç mysqldump komutudur. Küçük ve orta ölçekli veritabanları için ideal bir çözüm sunar:

# Tek bir veritabanını yedekleme mysqldump -u root -p --single-transaction --routines --triggers mydb > mydb_$(date +%Y%m%d_%H%M%S).sql # Tüm veritabanlarını yedekleme mysqldump -u root -p --all-databases --single-transaction > all_databases_$(date +%Y%m%d).sql # Sıkıştırılmış yedekleme (büyük veritabanları için) mysqldump -u root -p --single-transaction mydb | gzip > mydb_$(date +%Y%m%d).sql.gz

--single-transaction parametresi InnoDB tabloları için kilit kullanmadan tutarlı bir yedek almanızı sağlar. Büyük veritabanlarında (50 GB+) xtrabackup veya mariabackup gibi fiziksel yedekleme araçlarını tercih edin; bu araçlar sıcak yedekleme (hot backup) yapabilir ve artımlı yedeklemeyi destekler:

# Xtrabackup ile tam yedekleme xtrabackup --backup --target-dir=/backup/full/ --user=root --password=secret # Xtrabackup ile artımlı yedekleme xtrabackup --backup --target-dir=/backup/inc1/ --incremental-basedir=/backup/full/ --user=root --password=secret

PostgreSQL Yedekleme

PostgreSQL, yedekleme konusunda güçlü yerleşik araçlar sunar:

# pg_dump ile mantıksal yedekleme pg_dump -U postgres -Fc -f mydb_$(date +%Y%m%d).dump mydb # Paralel yedekleme (büyük veritabanları için hız artışı) pg_dump -U postgres -Fd -j 4 -f /backup/mydb_dir mydb # Geri yükleme pg_restore -U postgres -d mydb_restored -j 4 /backup/mydb_dir

Üretim ortamları için WAL (Write-Ahead Log) arşivleme ile sürekli yedekleme (continuous archiving) kurmanız önemle tavsiye edilir. Bu yöntem, belirli bir zaman noktasına geri dönüş (Point-in-Time Recovery - PITR) yapmanıza olanak tanır:

# postgresql.conf ayarları archive_mode = on archive_command = 'cp %p /backup/wal_archive/%f' wal_level = replica

Ayrıca pgBackRest veya Barman gibi araçlar, WAL yönetimi, artımlı yedekleme, paralel sıkıştırma ve S3 uyumlu uzak depolamayı tek bir çatı altında sunar.

MongoDB Yedekleme

NoSQL tarafında MongoDB için mongodump temel yedekleme aracıdır:

# Tüm veritabanlarını yedekleme mongodump --uri="mongodb://localhost:27017" --out=/backup/mongo_$(date +%Y%m%d) # Belirli bir koleksiyonu yedekleme mongodump --db=myapp --collection=users --gzip --archive=/backup/users.gz # Geri yükleme mongorestore --gzip --archive=/backup/users.gz --db=myapp

Dosya Sistemi Yedekleme Stratejileri

rsync ile Akıllı Yedekleme

rsync, dosya yedeklemenin vazgeçilmez aracıdır. Sadece değişen dosyaları aktardığı için hem bant genişliği hem de zaman tasarrufu sağlar:

# Temel rsync yedekleme rsync -avz --delete /var/www/ /backup/www/ # Uzak sunucuya SSH üzerinden yedekleme rsync -avz -e "ssh -p 2222" /var/www/ user@backup-server:/backup/www/ # Belirli dosya türlerini hariç tutma rsync -avz --exclude='*.log' --exclude='node_modules' --exclude='.cache' /home/app/ /backup/app/

Hardlink Tabanlı Rotasyonlu Yedekleme

rsync'in --link-dest özelliği ile değişmeyen dosyalar için hardlink kullanarak her gün tam yedek görüntüsü oluşturabilirsiniz. Bu yöntem, disk alanını verimli kullanırken her yedek dizininin bağımsız ve eksiksiz bir kopyaya sahip olmasını sağlar:

#!/bin/bash BACKUP_BASE="/backup/daily" DATE=$(date +%Y%m%d) LATEST=$(ls -1d ${BACKUP_BASE}/2* 2>/dev/null | tail -1) TARGET="${BACKUP_BASE}/${DATE}" if [ -n "$LATEST" ]; then rsync -avz --delete --link-dest="$LATEST" /var/www/ "$TARGET/" else rsync -avz --delete /var/www/ "$TARGET/" fi # 30 günden eski yedekleri temizle find "$BACKUP_BASE" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;

Restic ile Modern Yedekleme

Restic, şifreleme, deduplikasyon ve bulut depolama desteği sunan modern bir yedekleme aracıdır:

# Depo oluşturma (S3) restic -r s3:s3.amazonaws.com/my-backup-bucket init # Yedekleme restic -r s3:s3.amazonaws.com/my-backup-bucket backup /var/www /etc # Eski yedekleri temizleme: son 7 günlük, 4 haftalık, 6 aylık tut restic -r s3:s3.amazonaws.com/my-backup-bucket forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

3-2-1 Kuralı

Endüstri standardı olan 3-2-1 kuralı, yedekleme stratejinizin temelini oluşturmalıdır:

  • 3 kopya: Verinin orijinali dahil en az üç kopyası olmalı
  • 2 farklı ortam: Yedekler en az iki farklı depolama ortamında tutulmalı (örneğin yerel disk + bulut)
  • 1 offsite: En az bir kopya fiziksel olarak farklı bir lokasyonda olmalı

Otomasyonla Cron Yapılandırması

Yedekleme işlemleri mutlaka otomatikleştirilmelidir. Manuel yedekleme, er ya da geç unutulur:

# crontab -e ile düzenleyin # Her gece 02:00'de veritabanı yedekleme 0 2 * * * /usr/local/bin/backup_db.sh >> /var/log/backup_db.log 2>&1 # Her gece 03:00'te dosya yedekleme 0 3 * * * /usr/local/bin/backup_files.sh >> /var/log/backup_files.log 2>&1 # Her Pazar 01:00'de tam yedekleme 0 1 * * 0 /usr/local/bin/full_backup.sh >> /var/log/full_backup.log 2>&1

Yedekleme Doğrulama ve İzleme

Yedekleme almak işin sadece yarısıdır. Düzenli olarak geri yükleme testleri yapmak kritik öneme sahiptir:

  • Otomatik doğrulama: Yedekleme sonrası dosya boyutu, checksum kontrolü ve veritabanı bütünlük testi çalıştırın
  • Periyodik geri yükleme testi: Ayda en az bir kez yedeklerinizi test ortamına geri yükleyerek çalıştığını doğrulayın
  • Uyarı sistemi: Yedekleme başarısız olduğunda bildirim gönderen bir izleme mekanizması kurun (örneğin Healthchecks.io, Prometheus, basit bir e-posta scripti)
  • Yedekleme raporlaması: Boyut, süre ve başarı durumunu günlük olarak loglayın
#!/bin/bash # Basit yedekleme doğrulama örneği BACKUP_FILE="/backup/mydb_$(date +%Y%m%d).sql.gz" if [ -f "$BACKUP_FILE" ] && [ $(stat -c%s "$BACKUP_FILE") -gt 1000 ]; then echo "$(date): Yedekleme başarılı - $(du -h $BACKUP_FILE | cut -f1)" >> /var/log/backup_verify.log curl -fsS --retry 3 https://hc-ping.com/YOUR-UUID-HERE > /dev/null else echo "$(date): HATA - Yedekleme dosyası bulunamadı veya çok küçük!" >> /var/log/backup_verify.log echo "Yedekleme hatası!" | mail -s "ALARM: Yedekleme Başarısız" admin@sirket.com fi

Güvenlik Hususları

Yedekleme dosyaları da en az üretim verileri kadar korunmalıdır:

  • Yedekleme dosyalarını mutlaka şifreleyin (GPG, restic veya rclone crypt ile)
  • Yedekleme sunucusuna erişimi minimum yetkiyle sınırlayın
  • Bulut depolamada immutable (değiştirilemez) yedekler kullanarak ransomware'e karşı koruma sağlayın (S3 Object Lock, Azure Immutable Blob Storage)
  • Yedekleme credential'larını üretim erişim bilgilerinden ayrı tutun

Sonuç

Etkili bir yedekleme stratejisi; doğru araçların seçimi, 3-2-1 kuralının uygulanması, otomasyonun sağlanması ve düzenli geri yükleme testlerinin yapılmasıyla oluşur. Yedekleme, bir felaket yaşandığında değil bugün düşünülmesi gereken bir konudur. Veritabanınızın boyutu ve kritiklik düzeyine göre mantıksal veya fiziksel yedekleme yöntemlerinden uygun olanı seçin, dosya sistemleriniz için rsync veya restic gibi modern araçları kullanın ve her şeyi otomasyon altına alın. Unutmayın: test edilmemiş bir yedek, yedek değildir.

Yazar Hakkında
Fatih Algül
TechSoft Solutions
Proje mi var?

Yazılım, IoT veya otomasyon konularında destek almak ister misiniz?

İletişime Geç