Cómo hacer copia de seguridad (mongodump) de un servidor de base de datos MongoDB en contenedor Docker, guardando la copia en el equipo host anfitrión. Cómo restaurar (mongorestore) una copia en el equipo host anfitrión en un contenedor MongoDB en Docker.

Requisitos para hacer backup y restore de base de datos MongoDB en Docker

Para el backup usaremos un contenedor Docker con MongoDB desplegado. En el siguiente tutorial indicamos cómo desplegar un contenedor e imagen Docker con MongoDB:

En el caso anterior usamos un contenedor generado con el siguiente fichero compose.yml:

Para la recuperación de ejemplo en otro servidor MongoDB, desplegaremos un segundo contenedor Docker, con el siguiente fichero compose.yml:

En el caso de la segunda imagen, la llamamos mongodb_r y le cambiamos el puerto de conexión externo (27018), el usuario de acceso, y el nombre del volumen, para realizar las pruebas de recuperación.

Realizaremos un backup del contenedor mongodb. El fichero de backup generado lo recuperaremos en el contenedor mongodb_r.

Para realizar el backup necesitaremos conocer el nombre de ambos contenedores: mongodb y mongodb_r. Podemos obtenerlo con el comando:

Realizar copia de seguridad a host anfitrión de servidor MongoDB en Docker

Para realizar la copia de seguridad de un contenedor Docker con MongoDB (con nombre mongodb) y guardar el fichero de copia en el equipo host anfitrión (externo al contenedor), ejecutaremos el siguiente comando:

Devolviendo:

El comando anterior ejecutará, a su vez, el comando «mongodump» dentro del contenedor indicado. El fichero comprimido con el backup de todas las bases de datos de MongoDB se guardará en el equipo local, en el host anfitrión, en la carpeta donde hayamos ejecutado el comando, con el nombre «backup_mongodb.gz».

El fichero de backup quedará en la carpeta donde hayamos ejecutado el comando:

Podríamos crear una tarea programada para que hiciera backup cada cierto tiempo, ejecutando un .bat con el comando anterior.

Restaurar backup de MongoDB en servidor MongoDB en Docker

El servidor MongoDB de destino de la restauración (contenedor mongodb_r) únicamente tendrá las bases de datos del sistema: admin, config y local):

Para hacer el proceso inverso al anterior, la recuperación de un backup previamente hecho en el servidor MongoDB del contenedor mongodb_r, ejecutaremos el siguiente comando (recuperará todas las bases de datos contenidas en el fichero comprimido):

Devolviendo:

El comando anterior restaurará todas las bases de datos que haya en el fichero de backup backup-mongodb-gz. Si quisiéramos recuperar una única base de datos, o incluso una colección de una base de datos, añadiremos el parámetro nsinclude, por ejemplo, para recuperar la base de datos bdproyectoa y la colección bdproyectoa de la base de datos anterior, usaremos:

Si volvemos a acceder a MongoDB del contendor mongodb_r, nos aparecerá la base de datos recuperada bdproyectoa y sus colecciones y documentos: