2012-08-15 21 views
6

Voglio backup giornalieri per un singolo database mongodb, probabilmente con mongodump. Per non perdere dati, mi piacerebbe che fosse incrementale, quindi se qualcosa va storto nel bel mezzo della giornata, devo essere in grado di riprodurre i cambiamenti per quel giorno fino al punto di errore dopo aver fatto un mongorestore.Vuoi fare un backup incrementale per mongodb. Nel diario? Oplog?

Sto comprendendo correttamente che ho bisogno di utilizzare un oplog per questo? O sta registrando la risposta? Ho provato a fare quanto segue:

  1. Trasformare il mio database mongo in un set di repliche di uno solo, in modo da creare un oplog. (Questo si sente abbastanza hacky)
  2. Riavvio mongod con l'opzione --oplog
  3. Performing modifiche che dovrebbero essere registrati nel oplog

Tuttavia nulla mai viene memorizzato nel oplog. Qual è il modo migliore per eseguire tali backup incrementali? Sto fondamentalmente cercando un approccio simile alla riproduzione del myslog binlog.

Grazie

risposta

5

MongoDB non fornisce un'opzione di backup incrementale fuori dalla scatola, ma è possibile fare un file di snapshot e riprodurre l'oplog. Hai configurato il tuo server come un set di repliche seguendo i passaggi delineati nella documentazione? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

Potrebbe dirci anche lo scopo di questi backup? Hai considerato di aggiungere un secondo nodo al set di repliche per la durabilità dei dati?

Se è stata eseguita la procedura per configurare il server come membro di un set di repliche, è possibile eseguire rs.status() nella shell?

Un'altra nota (solo per chiarire) - l'inserimento nel journal non è pensato per essere una strategia di backup; l'inserimento nel diario si limita a garantire che il database possa tornare a uno stato coerente in caso di failover. È consigliabile eseguire l'esecuzione con journaling abilitato.

Ecco la documentazione MongoDB per i backup: http://www.mongodb.org/display/DOCS/Backups

+0

Grazie per i chiarimenti, ho esaminato questo più ieri e capisco cosa deve accadere. Quello che voglio fare è fare un daily mongodump, salvarlo su S3 e ogni ora salvare anche il mio oplog su S3. Ho due domande successive se vuoi essere così gentile: 1. Il mio oplog è memorizzato nel database locale e sono ora in grado di accedervi dalla shell mongo. Per eseguire il backup dell'oplog, posso semplicemente copiare tutti i file locali (1-N) e local.ns in s3? 2. Qual è il modo migliore per riprodurre gli oplogs? Mongorestore --oplogReplay abbastanza per questo? Grazie mille! –

+2

mongodump --oplog garantisce che tutte le voci di oplog create durante il dump possano essere riprodotte con mongorestore --oplogReplay. Non è possibile utilizzare mongorestore --oplogReplay per riprodurre le operazioni di oplog che si sono verificate dopo il completamento del dump. Una soluzione che potresti indagare è di scaricare la raccolta di oplog ogni ora e utilizzare il comando applyOps: http://docs.mongodb.org/manual/reference/commands/#applyOps – Jenna

+1

Questo potrebbe essere un hacky .. ma penso che usando mongorestore --oplogReplay ha funzionato davvero. Quello che ho fatto è stato mongodumped l'oplog, spostato il risultato 'oplog.rs.bson 'a' dump/oplog.bson 'e ha eseguito mongorestore --oplogReplay. È pericoloso? Se lo farò, andrò sicuramente con la tecnica applyOps. –

0

Il modo migliore per fare le copie di backup è quello di configurare Ops Manager come parte della vostra infrastruttura MongoDB, ma lo fa molto di più che i backup ...