Dostałem zadanie tworzenia przyrostowych kopii zapasowych dla repliki MongoDB, jako punkt początkowy, oczywiście, przejrzałem go i nie mogłem znaleźć niczego w dokumentach MongoDB, znalazłem jednak to pytanie na Stack Overflow, które zachęciło do opracowania własnego rozwiązania ponieważ nie uważał Tayry za bardzo aktywną.
Przeczytałem o tym oplogi zdałem sobie sprawę, że bardzo łatwo było opracować coś, aby odtworzyć dziennik, ale okazuje się, że nie musiałem, jak mongorestoreto dla mnie.
Teraz mam działające rozwiązanie ze skryptami bash i było to dość łatwe, dlatego pytam tutaj, czy w mojej logice jest jakaś wada, a może coś, co mnie ugryzie w przyszłości.
Poniżej, jak to zaimplementowałem:
Pełna procedura tworzenia kopii zapasowej
- lock zapisuje na drugorzędnym elemencie
db.fsyncLock() - Zrób zdjęcie
Zapisz ostatnią pozycję z oplogu
db.oplog.rs.find().sort({$natural:-1}).limit(1).next().tsOdblokuj pisze
db.fsyncUnlock()
Procedura przyrostowej kopii zapasowej
- lock zapisuje na drugorzędnym elemencie
Zrzuć oplog z zarejestrowanej pozycji oplog na pełnej (lub najnowszej przyrostowej) kopii zapasowej:
mongodump --host <secondary> -d local -c oplog.rs -o /mnt/mongo-test_backup/1 --query '{ "ts" : { $gt : Timestamp(1437725201, 50) } }'Zapisz najnowszą pozycję oplogu (w taki sam sposób, jak w przypadku pełnych kopii zapasowych)
- Odblokuj pisze
Procedura przywracania pełnej kopii zapasowej
- zatrzymaj wszystkie wystąpienia
mongod - skopiuj migawkę do katalogu danych skrzynki, która będzie podstawowa, ale pamiętaj, aby wykluczyć wszystko,
local*amongod.lockta technika przywracania nazywana jest rekonfiguracją przez rozbicie lustra - Zacznij podstawową
- rekonfiguruj replicaset
- uruchom pomocnicze bez żadnych danych, pozwól im wykonać początkową synchronizację. Lub skopiuj dane z nowej podstawowej z nową
localbazą danych
Przywróć przyrostową kopię zapasową
Kiedy utworzyliśmy przyrostową kopię zapasową, zapisaliśmy ją w następujący sposób:
/mnt/mongo-test_backup/1/local/oplog.rs.bson
/mnt/mongo-test_backup/1/local/oplog.rs.metadata.json
Jesteśmy wpisani, oplog.rs.bsonale będziemy musieli zmienić nazwę, więc oto kroki:
- zmień katalog na kopię zapasową:
cd /mnt/mongo-test_backup/1/local - usuń plik json
rm *.json - zmień nazwę pliku bson
mv oplog.rs.bson oplog.bson przywróć to:
mongorestore -h <primary> --port <port> --oplogReplay /mnt/mongo-test_backup/1/local
Mam wszystko skrypty, mogę później zatwierdzić to w GitHub.
Pytanie brzmi, czy w logice jest jakaś wada? Jestem trochę podejrzliwy, ponieważ procedura jest dość prosta i nadal nie mogłem jej nigdzie udokumentować.