Yedek, geri yükleyebildiğiniz kopyadır. Geri yüklemeyi hiç denemediyseniz elinizde bir yedek olduğundan emin olamazsınız. Sunucunun sağlayıcısı anlık görüntü (snapshot) ya da yedek hizmeti sunsa bile, kendi yedek planınızı ayrıca yapmanız sağlıklı bir alışkanlıktır.
Neyi yedeklemeli
- Veri: Veritabanları, yüklenen dosyalar, uygulama verisi.
- Yapılandırma:
/etcaltındaki ilgili dosyalar, Nginx siteleri, ortam değişkenleri dosyaları, cron girdileri. - Uygulama kodu: Genellikle sürüm kontrol sisteminden geri gelir, ancak sunucuda yerel değişiklik varsa dahil edin.
Yeniden kurulabilen şeyleri (paketler, önbellekler) yedeklemeye gerek yoktur.
3-2-1 kuralı
- 3 kopya veri (üretimdeki + 2 yedek),
- 2 farklı ortam ya da sistem,
- 1 kopya farklı bir konumda (aynı sunucudan ve aynı arıza alanından bağımsız).
Aynı diskte tutulan "yedek" disk arızasına, aynı sunucuda tutulan yedek ise sunucunun ele geçirilmesine karşı koruma sağlamaz.
İki ölçüt: RPO ve RTO
- RPO: En çok ne kadarlık veri kaybını kabul edebilirsiniz? Günlük yedek, en kötü durumda bir günlük veri kaybı demektir.
- RTO: Geri dönmek için ne kadar süreniz var?
Bu iki cevap yedek sıklığını ve yöntemini belirler.
Veritabanı yedeği
Çalışan bir veritabanının dosyalarını doğrudan kopyalamak tutarsız yedek verebilir. Veritabanının kendi aracını kullanın:
# PostgreSQL
pg_dump -Fc -U kullanici veritabani > /yedek/veritabani-$(date +%F).dump
# MariaDB / MySQL
mysqldump --single-transaction -u kullanici -p veritabani > /yedek/veritabani-$(date +%F).sqlParolayı komut satırına yazmak yerine yapılandırma dosyası (~/.my.cnf, ~/.pgpass) kullanın ve bu dosyaların iznini 600 yapın.
rsync ile dosya yedeği
Başka bir makineye SSH üzerinden artımlı kopya:
rsync -az --delete -e ssh /var/www/ yedek@YEDEK_SUNUCU:/yedekler/www/--delete hedefte kaynakta olmayan dosyaları siler; yanlış kullanımı veri kaybettirir. Önce --dry-run ile ne yapacağına bakın. Sürüm geçmişi tutmak istiyorsanız BorgBackup veya restic gibi tekilleştirme yapan ve şifreleyebilen bir araç düşünün.
Zamanlama
crontab -e ile her gece 03:30'da çalıştırmak için:
30 3 * * * /usr/local/bin/yedekle.sh >> /var/log/yedekle.log 2>&1Betiğin hata durumunda sizi uyarması (e-posta ya da bir izleme servisi) yedeğin sessizce durmasını önler.
Geri yüklemeyi sınayın
- Yedeği boş bir test sunucusuna geri yükleyin ve uygulamanın açıldığını doğrulayın.
- Bunu düzenli aralıklarla tekrarlayın; ne sıklıkta olacağına kendi risk tahmininize göre karar verin.
- Geri yükleme adımlarını yazılı tutun; olay anında hatırlamaya güvenmeyin.
Şifreleme ve erişim
Yedekler genellikle üretim verisinin tamamını içerir. Uzak konumda saklanan yedekleri şifreleyin, şifreleme anahtarını yedeğin kendisinden ayrı saklayın ve yedek hesabına yalnızca gereken erişimi verin.