MongoDB replicaset için artımlı yedeklemeler yapma görevi verildi, başlangıç noktası olarak elbette, Google’a gitmiştim ve MongoDB belgelerinde hiçbir şey bulamadım, ancak bu soruyu kendi çözümümü geliştirmeye teşvik eden Stack Overflow’ta buldum. Tayra'yı çok aktif bulmadı.
Bilgiyi okudum oplog
ve günlüğü tekrarlamak için bir şeyler geliştirmenin çok kolay olduğunu anladım, ancak benim için böyle bir şey yapmak zorunda olmadığım ortaya çıktı mongorestore
.
Şimdi bash scriptleri ile çalışan bir çözümüm var ve bu oldukça kolaydı, işte mantığımın herhangi bir kusuru veya gelecekte beni ısırtacak bir şey olup olmadığını sormamın nedeni bu.
Bunu nasıl uyguladım aşağıda:
Tam yedekleme prosedürü
- lock ikincil bir üyeye yazıyor
db.fsyncLock()
- Ekran alıntısı al
Oplog'dan son pozisyonu kaydet
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().ts
Kilidini yazar
db.fsyncUnlock()
Artımlı yedekleme prosedürü
- lock ikincil bir üyeye yazıyor
Tam (veya en son artımlı) yedeklemede kayıtlı oplog konumundan oplogyu boşalt:
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'
En son oplog konumunu kaydet (tam yedeklemeler için olduğu gibi)
- Kilidini yazar
Tam yedekleme geri yükleme prosedürü
- tüm örneklerini durdur
mongod
- anlık olanı birincil olan kutunun veri dizinine kopyala, ancak hepsini dışladığından emin ol
local*
vemongod.lock
bu geri yükleme tekniğine aynayı kırarak yeniden yapılandırma denir. - Birincil başlat
- kopya kopyayı yeniden yapılandırma
- herhangi bir veri olmadan ikincilleri başlatın, ilk senkronizasyonu yapmalarına izin verin. Veya verileri yeni birincil
local
veri tabanından yeni veritabanına kopyalayın.
Artımlı yedeklemeyi geri yükle
Artımlı yedekleme oluşturduğumuzda bunu şöyle sakladı:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Gizlendik oplog.rs.bson
ama yeniden adlandırmamız gerekecek, işte adımlar:
- dizini yedeğe değiştir:
cd /mnt/mongo-test_backup/1/local
- json dosyasını sil
rm *.json
- bson dosyasını yeniden adlandır
mv oplog.rs.bson oplog.bson
geri yükle:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
Hepsini yazdıysam, daha sonra GitHub'a yazabilirim.
Asıl soru, mantıkta herhangi bir kusur olup olmadığıdır? Prosedür oldukça basit olduğundan şüpheliyim ve hala hiçbir yerde belgelemedim.