DBAtlas · Veritabanı operasyon atlası

MongoDB yedek ve geri yükleme (mongodump, mongorestore, snapshot)

MongoDBSeviye: OrtaSüre: 45–90 dk

Kurulu bir MongoDB için yedekleme düzenini kurar ve yedekten geri dönüşü senaryo senaryo anlatır. Yedekleme: mongodump ile tek collection, veritabanı ya da tüm deployment (--archive --gzip; replica set'te --oplog ile tutarlı nokta, secondary'den okuma), kimlik dosyası, systemd timer/cron ile saklama süreli zamanlanmış yedek, test restore ve isteğe bağlı dosya sistemi snapshot'ı. Geri yükleme: restore provası, tam restore, tek veritabanı/collection, yedek + oplog ile belirli bir ana dönüş, başka cluster'a klon ve sharded cluster. Yüzlerce GB'lık veride, hızlı geri dönüş gerekiyorsa ya da sharded cluster'da mongodump yerine snapshot veya kurumsal araç (PBM, Ops Manager) tercih edilir; seçim ilk adımlarda anlatılır.

Yapı: Yedek sunucusu ya da bir üye + replica set / tek instance / sharded cluster (mongos)

Senaryolar

  • Yedeklemeyi kur: mongodump, zamanlama ve test restore — Yedek kullanıcısı, kimlik dosyası, elle ve zamanlanmış mongodump, yeniden adlandırarak test restore; isteğe bağlı snapshot ve mongoexport. İlk kez kuruyorsanız buradan başlayın.
  • Yedek gerçekten geri yüklenebilir mi? (--dryRun ve geçici instance'ta prova) — Canlı veriye dokunmadan: arşivin bütünlüğü, içindeki namespace'ler ve oplog, isteğe bağlı olarak geçici bir mongod'a tam geri yükleme ve belge sayımı.
  • Tüm veriyi yedekten geri yükle (tam restore, --drop) — Veri büyük ölçüde kayboldu ya da bozuldu ve deployment yedeğin alındığı ana dönecek. Yedekten sonraki yazmalar kaybolur; uygulama restore süresince durur.
  • Tek veritabanını ya da collection'ı geri getir (--nsInclude, yeni adla ya da yerinde) — Bir collection/veritabanı silindi ya da bozuldu, geri kalanı sağlam: yalnız o namespace yedekten gelir; diğer verilere dokunulmaz, uygulama açık kalabilir.
  • Belirli bir ana dön: yedek + oplog (yanlışlıkla drop, hatalı update/delete) — Hatalı işlem yedekten sonra oldu ve o ana kadar olan yazmalar da gerekli: son tam yedek geri yüklenir, canlı oplog hatalı işlemden hemen öncesine kadar uygulanır (--oplogReplay --oplogLimit). Yalnız replica set.
  • Yedeği başka bir cluster'a / sunucuya geri yükle (klon, test ortamı, taşıma) — Kaynak deployment'a dokunulmaz: yedek başka bir replica set ya da instance'a açılır (test/raporlama kopyası, sunucu taşıma, sürüm geçişi); kullanıcılar isteğe bağlı taşınır.
  • Sharded cluster'ı geri yükle: mongodump'ın sınırları ve doğru yöntem — Yedeklenen yapı sharded cluster: mongos üzerinden mantıksal geri yükleme (shard key'lerin yeniden kurulması, balancer) ya da koordineli snapshot'larla tüm cluster'ın fiziksel geri kurulumu.

Başlamadan önce

  • Yedek alınan sunucu desteklenen bir işletim sisteminde; saat NTP ile senkron ve saat dilimi doğru (yedek dosya adları ve zamanlama yerel saate göredir).
  • Bu sunucudan … adreslerine ad çözümlemesi ve port erişimi var.… Replica set'te bağlantı dizesindeki adlar, rs.conf() içindeki üye adlarıyla aynı olmalı; sürücü bu adlara bağlanır.…
  • … veri diskinden ayrı bir diskte ya da ağ paylaşımında ve boş alan, sıkıştırılmış yedek boyutunun (genelde verinin %20–50'si) en az saklama süresi kadar katı. Aynı diskteki yedek, diskin kaybında veriyle birlikte gider.
  • Yetkilendirme açık ve … kullanıcısı (root ya da userAdminAnyDatabase + clusterAdmin rolleri) ve parolası elinizde. Yedek kullanıcısı bu kullanıcıyla oluşturulur.
  • Oplog penceresi, tam yedeğin süresinden belirgin şekilde uzun (en az birkaç saat). --oplog yedek süresince oluşan oplog kayıtlarını toplar; pencere yedekten kısaysa yedek başarısız olur.… Zamana dönüşte canlı oplog'un ilk kaydı, kullanılacak tam yedeğin bittiği andan önce olmalı; aksi halde aradaki işlemler hiçbir yerde yoktur.…
  • MongoDB repo'suna (repo.mongodb.org) HTTPS erişimi var ya da kurum içi mirror tanımlı; araçlar sunucuda kuruluysa sürümleri görünür.
  • dbPath (…) … LV'si üzerinde ve volume grubunda en az … boş alan var. WiredTiger journal'ı (…/journal) aynı LV'de olmalı; başka diske taşınmışsa snapshot'tan önce fsyncLock zorunludur.
  • Root ya da sudo yetkisi var. Tam geri yükleme yapılacaksa bakım penceresi ve uygulama ekibinin onayı alındı.… Geri yüklemeden önce olayın kaydı (ne zaman, hangi işlem, kim) tutuldu; uygulama ekibi hangi verinin geri geleceğini biliyor.…
  • Yedekleme bu rehberin "Yedeklemeyi kur" senaryosuyla kurulu: araçlar (mongorestore, mongosh) ve kimlik dosyası … (…: backup + restore) bu sunucuda var. Yoksa önce Yedeklemeyi kur senaryosunun ilk iki aşamasını uygulayın.
  • Geri yüklemede veri ve index'ler yeniden yazılır: hedef sunucuların veri diskinde, geri gelecek verinin (sıkıştırılmamış) en az 1,5 katı boş alan var.… Replica set'te secondary'ler aynı yazmaları replikasyonla alır; oplog penceresi geri yükleme süresince kısalır.…
  • … için, geri gelecek verinin sıkıştırılmamış boyutu kadar (tam yedek + oplog) boş alan var. Geçici mongod yalnız 127.0.0.1'de … portunu dinler; portun boş olması gerekir.
  • Hedef (…) kurulu ve çalışıyor, yetkilendirme açık, … (root) kullanıcısının parolası elinizde. Hedef sürüm kaynakla aynı ya da daha yeni (ör. 7.0 → 8.0); eski sürüme geri yükleme desteklenmez.

Rehberin aşamaları

  • Araçların kurulumu — MongoDB … repo'sunu ekle · MongoDB … repo'sunu ekle · mongodump, mongorestore ve mongosh'u kur · Yedek dizinini hazırla
  • Yedek kullanıcısı ve kimlik dosyası — Yedek kullanıcısını oluştur · Kimlik dosyasını yaz (--config) · Bağlantıyı test et
  • Manuel yedek (mongodump) — Veri boyutunu ve oplog penceresini kontrol et · Balancer'ı durdur · mongodump ile yedek al · Balancer'ı yeniden başlat · Yedeği doğrula (gzip ve dryRun) · Sorguyla alt küme yedeği (--query)
  • Geri yükleme (mongorestore) — Yeniden adlandırarak test restore (--nsFrom/--nsTo) · Belge sayılarını karşılaştır · Test veritabanını sil · oplogReplay için rol tanımla · Yerinde tam geri yükleme (--drop) · Geçici yetkiyi geri al …
  • mongoexport / mongoimport (veri taşıma, yedek değil) — Collection'ı dışa aktar (mongoexport) · Ayrı bir collection'a içe aktar (mongoimport) · Tipleri karşılaştır ve temizle
  • Dosya sistemi snapshot'ı — LVM snapshot al (fsyncLock ile) · Snapshot'ı yedek dizinine arşivle · fsyncLock ile dosya kopyası al
  • Sharded cluster yedeği: sınırlar ve kurumsal yol — Tutarlı sharded cluster yedeği için yöntem seçimi
  • Zamanlanmış yedek ve saklama — Balancer'ı yedek saatinin dışında çalışacak şekilde sınırla · Yedek betiğini yaz · Betiği çalıştırılabilir yap · Uzak sunucuya SSH erişimini hazırla · systemd service ve timer'ı oluştur · Zamanlanmış yedeği elle tetikle ve doğrula …
  • İzleme ve bakım — Son yedeğin yaşını izle · Düzenli geri dönüş tatbikatı
  • 1. Teşhis: yedek dosyaları ve araçlar — Yedek dosyalarını ve sırayla son yedekleri listele
  • 2. Prova: arşivi okuma — Sıkıştırma bütünlüğünü kontrol et (gzip -t) · Restore'u veri yazmadan dene (--dryRun) · Arşivde oplog var mı? (tutarlı nokta)
  • 3. Prova: geçici instance'a tam geri yükleme — Geçici instance için mongod'u hazırla · Geçici mongod'u başlat · Yedeği geçici instance'a geri yükle · Geri yüklenen veriyi say · Geçici instance'ı durdur ve sil
  • 4. Sonrası — Provanın sonucunu kaydet
  • Sharded cluster: tam restore bu senaryoyla yapılmaz — Sharded cluster senaryosuna geçin
  • 1. Teşhis: tam restore doğru senaryo mu? — Mevcut durumu ve etkilenen veriyi gör · Restore'u veri yazmadan dene (--dryRun)
  • 2. Güvenlik ağı — Uygulamayı durdur ve bağlantıları kontrol et · Mevcut durumun yedeğini al (geri dönüş noktası)
  • 3. Uygulama: tam restore — oplogReplay için geçici yetki ver · Yedeği yerinde geri yükle (--drop… --oplogReplay…) · Geçici yetkiyi geri al · Restore'un geçici kullanıcı collection'larını temizle
  • 4. Doğrulama — Belge ve index sayılarını kontrol et · Replica set'in eşitlendiğini kontrol et
  • 5. Sonrası — Yeni tam yedek al ve uygulamayı aç
  • 1. Teşhis: namespace'in bugünkü hali ve yedekteki hali — Canlıdaki durumu gör · Restore'u veri yazmadan dene (--dryRun)
  • 2. Güvenlik ağı — Mevcut durumun yedeğini al (geri dönüş noktası)
  • 2. Uygulama: yeni adla geri yükle — Yedeği yeni adla geri yükle (--nsFrom/--nsTo) · Yedekteki ve canlıdaki sayıları karşılaştır · Silinen belgeleri canlıya geri ekle ($merge) · Geçici kopyayı sil
  • 3. Uygulama: yerinde geri yükle (--drop) — Shard key'i koru: collection'ı yeniden shard'la · Namespace'i yerinde geri yükle
  • Zamana dönüş yalnız replica set'te — Bu deployment'ta oplog ile zamana dönüş yapılamaz
  • 1. Teşhis: hatalı işlemin anı ve oplog penceresi — Hatalı işlemi oplog'da bul · Tam yedeğin oplog penceresi içinde olduğunu doğrula
  • 2. Güvenlik ağı: canlı oplog'u kopyala — Canlı oplog'un kopyasını al · Mevcut durumun yedeğini al (geri dönüş noktası)
  • 3. Uygulama: geçici instance'ta o ana dön — Geçici instance için mongod'u hazırla · Geçici mongod'u başlat · Tam yedeği geçici instance'a geri yükle · Canlı oplog'u hatalı işlemden öncesine kadar uygula · Geri gelen veriyi geçici instance'ta kontrol et · Kurtarılan veriyi canlıya aktar …
  • 4. Sonrası — Yeni tam yedek al ve kök nedeni gider
  • 1. Teşhis: hedef doğru mu, uyumlu mu? — Hedefin kaynak olmadığını ve sürümünü doğrula · Restore'u veri yazmadan dene (--dryRun)
  • 2. Güvenlik ağı ve hedef kimliği — Hedef için geçici kimlik dosyası yaz · Hedefteki mevcut verinin yedeğini al
Ortamına göre adım adım planı aç →