Veritabanı Yedekleme ve Kurtarma

Yanıtlanması gereken soru "yedek alıyor muyuz" değil, veritabanı erişilemez duruma geldiğinde sistemin ne kadar sürede ve ne kadar veri kaybıyla ayağa kaldırılabileceğidir.

Yedekleme çözümlerinde uzmanız

Kurtarma planı olmayan yedekleme, kesinti anında işe yaramaz. Yedekleme mimarisini kurtarma hedeflerinize göre tasarlıyor ve düzenli testlerle çalıştığını kanıtlıyoruz.

RTO / RPO tasarımı

RTO (Recovery Time Objective), sistemin kabul edilebilir kesinti süresini tanımlar. RPO (Recovery Point Objective) ise tolere edilebilecek maksimum veri kaybını belirler. Yedekleme mimarisini bu iki hedefe göre tasarlarız.

Full, differential ve incremental

Her gece tam (full) yedek almak çoğu üretim sisteminde ne gerekli ne de uygulanabilirdir. Yedek tiplerini birlikte kurgulayarak yedekleme penceresini ve depolama maliyetini, belirlenen RPO hedefini bozmadan optimize ediyoruz.

Otomatik geri yükleme testleri

Geri yükleme testi yapılmamış bir yedek, yedek sayılmaz. Geri yükleme (restore) sürecini izole bir ortamda periyodik ve otomatik olarak çalıştırıyoruz. Ölçtüğümüz değer yedeğin varlığı değil, kurtarma süresidir.

PITR (Point-in-Time Recovery)

Hatalı bir DELETE sorgusu gece yarısı çalıştırıldığında, sabah alınan yedeğe dönmek veri kaybı anlamına gelir. WAL ve binary log arşivlemesi sayesinde sistemi hatalı işlemin hemen öncesindeki duruma geri getiriyoruz.

Yedekleme stratejisi araçla değil, hedeflerle başlar

Etkili bir yedekleme stratejisi, doğru aracı seçmekle değil, aşağıdaki iki kritik metriği belirlemekle başlar:

  • RTO (Recovery Time Objective): Veritabanı erişilemez duruma geldiğinde sistemin ne kadar süre kapalı kalabileceğini, yani kabul edilebilir kesinti süresini tanımlar.
  • RPO (Recovery Point Objective): Olası bir felaket senaryosunda maksimum ne kadarlık veri kaybının tolere edilebileceğini belirler.

RTO ve RPO hedeflerini teknik ekipler değil, iş birimleri belirler. Örneğin bir e-ticaret platformunda 15 dakikalık bir veri kaybı dahi kabul edilemezken, gecelik toplu işlem (batch processing) yürüten bir raporlama veritabanında bir günlük veri kaybı makul karşılanabilir. Aynı yedekleme araçları kullanılsa bile, iki senaryo için tamamen farklı mimariler tasarlanır.

Sahada en sık karşılaştığımız sorun, RTO ve RPO hedeflerinin hiç belirlenmemiş olmasıdır. Çoğu sistemde her gece standart tam yedek (full backup) alınır; ancak bir kesinti anında sistemin ne kadar sürede ayağa kalkacağını kimse bilmez. Bu bilgi genellikle ilk büyük kesintide, en kötü anda ortaya çıkar.

MySQL çözümleri

Fiziksel (physical) yedekleme süreçlerinde Percona XtraBackup kullanıyoruz. Araç, çalışan sunucuyu kilitlemeden tam yedek almamızı sağlar. Artımlı yedeklemelerde, referans alınan temel yedeğe göre iki farklı strateji kurgulanabilir:

  • Differential (fark): Her yedek, son alınan tam yedeğe göre oluşan değişiklikleri içerir. Daha fazla disk alanı tüketir; buna karşılık geri yükleme (restore) işlemi belirgin şekilde hızlanır.
  • Incremental (artımlı): Her yedek, bir önceki yedeğe göre oluşan değişiklikleri içerir. Disk alanından tasarruf sağlar; ancak geri yükleme aşamasında yedek zincirinin eksiksiz olması gerekir.

Hangi stratejinin seçileceği tamamen hedeflenen RTO süresine bağlıdır. Tek bir tabloyu kurtarmak veya sürümler arası veri göçü (migration) yapmak gibi mantıksal (logical) yedekleme ihtiyaçlarında ise mysqldump, büyük veri setlerinde paralel işlem yapabilen mydumper devreye girer.

Belirli bir anı kurtarmak amacıyla, PITR (Point-in-Time Recovery) stratejisi kapsamında binary log (binlog) arşivlemesi yapılandırıyoruz. Alınan son yedek gece 03:00’e ait olsa bile, binlog kayıtları sayesinde saat 14:37’de çalıştırılan hatalı bir UPDATE sorgusunun hemen öncesine dönmek mümkündür.

PostgreSQL çözümleri

PostgreSQL mimarilerinde pgBackRest tercih ediyoruz. Full, differential ve incremental yedekleme tiplerini native olarak destekleyen araç; sıkıştırma, veri saklama politikaları (retention policy), uzak sunucuya yedekleme ve WAL (Write-Ahead Logging) arşivlemesi üzerinden PITR yeteneklerini tek bir merkezde toplar. Çok sunuculu (cluster) mimarilerde yedeği doğrudan replika (standby) sunucudan alarak, aktif (primary) sunucunun yükünü artırmadan yedekleme yapmak da mümkündür.

Daha küçük ölçekli sistemlerde ise PostgreSQL ile birlikte gelen pg_basebackup yeterli olmaktadır. Ek bir bileşen gerektirmez ve WAL arşivlemesiyle entegre edildiğinde PITR sağlar. Hangi aracın kullanılacağı sistemin ölçeğine ve veri saklama ihtiyaçlarına göre belirlenir. Büyük ölçekli bir veritabanını pg_basebackup ile yönetmeye çalışmak da, küçük bir sistemi pgBackRest ile karmaşıklaştırmak da gereksiz operasyonel maliyet yaratır.

Her iki araç da açık kaynak lisansa sahiptir. Kullanım ve müşteri sistemine entegrasyon hakkımız buradan doğar; kurulum, yapılandırma ve sonrasındaki operasyonel bakım tarafımızdan yürütülür.

MongoDB çözümleri

MongoDB tarafında Percona Backup for MongoDB kullanıyoruz. Araç, hem ReplicaSet hem de sharded cluster kurulumlarında tutarlı yedek almayı sağlar; mantıksal (logical) ve fiziksel (physical) yedekleme tiplerini destekler ve oplog arşivlemesi yapılandırıldığında PITR (Point-in-Time Recovery) yeteneğini aynı araç üzerinden verir.

Sharded cluster kurulumlarında tutarlılık ayrıca ele alınması gereken bir sorundur. Her parçadan (shard) ayrı ayrı mongodump almak, parçaların farklı anlara ait kopyalarını üretir; birlikte geri yüklendiklerinde küme tutarlı bir duruma gelmez. Percona Backup for MongoDB yedeği küme genelinde eşgüdümlü aldığı için bu sorun ortadan kalkar.

mongodump ve mongorestore, tek ReplicaSet kurulumlarında ve koleksiyon düzeyinde kurtarma ihtiyaçlarında yeterlidir. Hangi aracın kullanılacağı veri boyutuna, kurtarma hedefine ve mimarinin sharded olup olmadığına göre belirlenir.

Araç açık kaynak lisanslıdır; kullanım ve müşteri sistemine entegrasyon hakkımız buradan doğar.

Yedeklerinizin gerçekten çalıştığından nasıl emin olabilirsiniz?

Bu sayfanın en kritik bölümü burasıdır. Bir yedekleme mekanizması iki şekilde fark ettirmeden iflas eder: ya yedek alma işlemi durur ve kimse fark etmez, ya da yedekler alınmaya devam eder ancak dosyalar bozulduğu için geri yüklenemez hâle gelir. İkinci senaryo çok daha tehlikelidir; çünkü izleme (monitoring) ekranlarında her şey “yeşil” görünmeye devam eder.

Bu riski ortadan kaldırmak için kurduğumuz her yedekleme altyapısına otomatik geri yükleme testleri entegre ediyoruz. Yedek dosyaları periyodik olarak izole bir test ortamına açılır, veritabanı ayağa kaldırılır, veri tutarlılık (consistency) kontrolleri yürütülür ve tüm sürecin süresi raporlanır. Testin sonucunda ortaya çıkan süre, kâğıt üzerinde taahhüt edilen değil, ölçümlenmiş gerçek RTO değerinizdir.

Ölçülen süre hedeflenen RTO değerinin üzerindeyse ortada bir kurtarma planı değil, yalnızca bir varsayım vardır — ve bunu sistem çöktüğünde öğrenirsiniz.

İlgili hizmetler

Şifrelenmiş bir veritabanının yedek dosyaları da şifrelenmelidir. İki süreç birlikte kurgulanır: Veritabanı Güvenliği ve KVKK Teknik Tedbirleri

Cluster mimarisi yedeklemenin yerini almaz; replikasyon veri kaybına karşı koruma sağlamaz: Yüksek Erişilebilirlik ve Cluster Çözümleri

Yedekleme penceresinin üretim yüküne etkisi performans çalışmasının kapsamındadır: Performans Optimizasyonu ve İzleme

Sık sorulan sorular

Kesinlikle vardır. Replikasyon yüksek erişilebilirlik (high availability) sağlar; yedekleme çözümü değildir. Yanlışlıkla silinen bir tablo veya bozulan bir veri kümesi, replika sunuculara da anında yansır. Replikasyon donanım ve sunucu arızalarına karşı koruma sağlar; operatör hatasına ve mantıksal veri bozulmasına karşı koruma sağlamaz. Replikasyon ve yedekleme farklı problemleri çözer ve her ikisi de gereklidir.

İki süreç birbirinden tamamen farklıdır ve karıştırılmaları ciddi veri kaybına yol açabilir. Yedekleme, veriyi geri yüklemek amacıyla alınan bir kopyadır; kaynak sistemde veri korunmaya devam eder. Arşivleme ise veriyi üretim sisteminden kalıcı olarak çıkarır; amaç disk alanı kazanmak veya veri saklama süresini yönetmektir. Arşivlenen bir kayıt, arşivleme sonrasında alınan yedeklerde yer almadığı için geri yükleme ile kurtarılamaz. Arşivleme süreçlerini KVKK teknik tedbirleri kapsamında ayrıca planlıyoruz.

Veritabanı şifrelenmişse yedek dosyalarının da şifrelenmesi zorunludur. Aksi hâlde şifreleme yatırımı yedekleme katmanında anlamını yitirir. Denetimlerde en sık tespit edilen bulgulardan biri, üretim veritabanı şifreliyken yedeklerin erişim denetimi olmayan bir paylaşımda saklanmasıdır. Hem yedekleme aracı seviyesinde şifrelemeyi hem de yedek deposunun erişim denetimini yapılandırıyoruz.

Testler en az ayda bir kez ve otomatik olarak çalıştırılmalıdır. Manuel yürütülen tatbikatlar ilk aylarda düzenli yapılır, sonrasında operasyonel yoğunluk nedeniyle terk edilir. Her test, ölçümlenmiş bir kurtarma süresi üretmelidir. Ölçülen süre taahhüt edilen RTO değerini aşıyorsa, kurumun elinde bir kurtarma planı değil, doğrulanmamış bir varsayım bulunuyor demektir.

Otomatik yedekler başlangıç seviyesinde koruma sağlar, ancak iki önemli sınırlaması bulunur. Saklama süreleri genellikle kısıtlıdır ve sağlayıcı hesabınıza erişiminizi kaybettiğiniz bir senaryoda yedeklere de erişemezsiniz. Sağlayıcı yedeklerine ek olarak, kurumun kendi denetimindeki ayrı bir konumda ikinci bir kopya oluşturulmasını öneriyoruz.

Kurtarma sürenizi ölçtünüz mü?

Mevcut yedekleme altyapınızı birlikte inceleyelim; RTO ve RPO hedefleriniz açısından bulunduğunuz noktayı ölçelim ve aradaki farkı kapatacak yol haritasını çıkaralım.

İletişime geçin