2012-08-15 17 views
6

Quiero realizar copias de seguridad diarias para una sola base de datos mongodb, probablemente con mongodump. Para no perder ningún dato, me gustaría que sea incremental, así que si algo sale mal a mitad del día, necesito poder reproducir los cambios para ese día hasta el punto de falla después de hacer un mongorestore.Quiere hacer una copia de seguridad incremental para mongodb. Diario? Oplog?

¿Entiendo correctamente que necesito usar un oplog para esto? ¿O está escribiendo en diario la respuesta? Intenté hacer lo siguiente:

  1. Convirtiendo mi base de datos mongo en un conjunto de réplicas de solo una, para que cree un oplog. (Esto se siente bastante hacky)
  2. Reinicio mongod con la opción --oplog
  3. Realizar cambios que deben ser registrados en el oplog

Sin embargo nunca nada se almacena en el oplog. ¿Cuál es la mejor manera de hacer tales copias de seguridad incrementales? Básicamente, estoy buscando un enfoque similar para reproducir el bitlog mysql.

Gracias

Respuesta

5

MongoDB no proporciona una opción de copia de seguridad incremental fuera de la caja, pero es posible hacer una instantánea de archivos y volver a reproducir el oplog. ¿Ha configurado su servidor como un conjunto de réplicas siguiendo los pasos descritos en la documentación? http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

¿Podría decirnos también el propósito de estas copias de seguridad? ¿Ha considerado agregar un segundo nodo a su conjunto de réplicas para la durabilidad de los datos?

Si ha seguido los pasos para configurar el servidor como miembro de un conjunto de réplicas, ¿puede ejecutar rs.status() en el shell?

Otra nota (solo para aclarar): escribir en diario no pretende ser una estrategia de copia de seguridad; el registro en diario simplemente garantiza que la base de datos pueda volver a un estado coherente en caso de conmutación por error. Se recomienda ejecutar con diario habilitado.

Aquí está la documentación de MongoDB para copias de seguridad: http://www.mongodb.org/display/DOCS/Backups

+0

Gracias por la aclaración, lo he investigado más ayer y entiendo lo que debe suceder. Lo que quiero hacer es hacer un mongodump diario, guardarlo en S3, y cada hora también guardar mi oplog a S3. Tengo dos preguntas de seguimiento si es tan amable: 1. Mi oplog está almacenado en la base de datos local y ahora puedo acceder a él desde el shell mongo. Para hacer una copia de seguridad del oplog, ¿puedo simplemente copiar todos mis archivos locales. (1-N) y local.ns a s3? 2. ¿Cuál es la mejor manera de reproducir oplogs? ¿Mongorestore --oplogReplay es suficiente para esto? ¡Muchas gracias! –

+2

mongodump --oplog garantiza que cualquier entrada de opto creado mientras se realiza el volcado se puede reproducir con mongorestore --oplogReplay. No puede usar mongorestore --oplogReplay para reproducir las operaciones oplog que ocurrieron después de finalizar el volcado. Una solución que podría investigar es descargar la colección de oplog cada hora y usar el comando applyOps: http://docs.mongodb.org/manual/reference/commands/#applyOps – Jenna

+1

Esto podría ser raro ... pero creo que usar mongorestore --oplogReplay realmente funcionó. Lo que hice fue mezclar el oplog, moví los 'oplog.rs' resultantes.bson 'to' dump/oplog.bson 'y ejecutó mongorestore --oplogReplay. ¿Esto es peligroso? Si es así, definitivamente iré con la técnica de applyOps. –

0

La mejor manera de hacer las copias de seguridad es configurar Ops Manager como parte de su infraestructura de MongoDB, pero lo hace mucho más que las copias de seguridad ...

Cuestiones relacionadas