2012-08-15 15 views
6

Chcę codziennie tworzyć kopie zapasowe dla pojedynczej bazy danych mongodb, prawdopodobnie z mongodump. Aby nie utracić żadnych danych, chciałbym, aby było to przyrostowe, więc jeśli coś pójdzie nie tak w środku dnia, potrzebuję móc powtórzyć zmiany w tym dniu aż do momentu awarii po zrobieniu sklepu z mongolami.Chcesz zrobić przyrostową kopię zapasową dla mongodb. Journaling? Oplog?

Czy poprawnie rozumiem, że muszę do tego użyć oploga? A może zapisujesz odpowiedź w dzienniku? Próbowałem wykonać następujące czynności:

  1. Przekształcanie mojej bazy danych mongo w zestaw replik tylko jednego, tak aby tworzył oplog. (To czuje się całkiem hacky)
  2. Ponowne mongod z opcją --oplog
  3. Performing zmiany, które powinny zostać zapisane w oplog

Jednak nic się nie dostaje przechowywane w oplog. Jaki jest najlepszy sposób tworzenia takich przyrostowych kopii zapasowych? Po prostu szukam podobnego podejścia do odtwarzania mysql binlog.

Dzięki

Odpowiedz

5

MongoDB nie zapewnić przyrostowej kopii zapasowej po wyjęciu z pudełka, ale jest to możliwe do zrobienia zrzutu pliku i odtworzyć oplog. Czy skonfigurowałeś swój serwer jako zestaw replik, wykonując czynności opisane w dokumentacji? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

Czy możesz nam również powiedzieć, jakie jest przeznaczenie tych kopii zapasowych? Czy rozważałeś dodanie drugiego węzła do zestawu replik o trwałość danych?

Jeśli wykonałeś kilka kroków, aby skonfigurować serwer jako członka zestawu replik, czy możesz uruchomić funkcję rs.status() w powłoce?

Jeszcze jedna uwaga (tylko po to, aby wyjaśnić) - księgowanie nie jest strategią tworzenia kopii zapasowych; kronikowanie zapewnia jedynie, że baza danych może powrócić do stanu spójnego w przypadku przełączenia awaryjnego. Uruchamianie z włączonym rejestrowaniem jest wysoce zalecane.

Oto dokumentacja MongoDB kopii zapasowych: http://www.mongodb.org/display/DOCS/Backups

+0

Dzięki za wyjaśnienia, zagłębiłem się w to wczoraj i rozumiem, co musi się stać. Chcę zrobić codzienną mongodump, zapisać ją na S3, a każda godzina również zapisać mój oplog na S3. Mam dwa pytania uzupełniające, jeśli byłbyś tak miły: 1. Mój oplog jest przechowywany w lokalnej bazie danych i mam teraz dostęp do niego z powłoki Mongo. Aby utworzyć kopię zapasową oploku, czy mogę skopiować wszystkie pliki lokalne (1-N) i local.ns do s3? 2. Jaki jest najlepszy sposób na powtórne oglory? Czy mongorestore --oplogReplay wystarczy na to? Dziękuję bardzo! –

+2

mongodump --oplog zapewnia, że ​​wszystkie wpisy oploga utworzone podczas zrzutu mogą być odtwarzane z mongorestore --oplogReplay. Nie można użyć magazynu mongorestore --oplogReplay do ponownego odtworzenia operacji oplog, które wystąpiły po zakończeniu zrzutu. Jednym z rozwiązań, które możesz zbadać, jest zrzucanie kolekcji oplog co godzinę i użycie polecenia applyOps: http://docs.mongodb.org/manual/reference/commands/#applyOps – Jenna

+1

To może być hacky .. ale myślę, że używanie sklepu z mongorekami --oplogReplay faktycznie działał. To, co zrobiłem, to mongorzucenie oploku, przeniesienie wynikowego "oplog.rs".bson 'to' dump/oplog.bson 'i uruchomiono mongorestore --oplogReplay. Czy to jest niebezpieczne? Jeśli tak, zdecydowanie skorzystam z techniki applyOps. –

0

Najlepszym sposobem, aby zrobić kopie zapasowe jest skonfigurowanie Ops Manager jako część swojej infrastruktury MongoDB, ale robi to znacznie więcej niż tylko kopie zapasowe ...

Powiązane problemy