fbpx
MongoDump e MongoRestore com Docker
Publicado em: segunda-feira, 1 de mar de 2021
Categorias: Docker de A a Z
Tags: Docker | MongoDB

Recentemente produzi a Jornada Dev Pro e foi um evento que teve uma aplicação de suporte. Embora funcionalmente não tenha atendido minhas expectativas, o projeto atendeu bem à seu propósito. Agora é hora de migrar essa infra para outro servidor, e aí? Como lidar com backup/restore do mongodb?

Audiência

  1. Esse post serve a todos que possuem instancias MongoDB em containers ou não, que precisam realizar operações de backup/restore.
  2. O emprego de Docker narrado nesse post, se dá para executar os utilitários mongodump e mongorestore.
  3. O que está descrito aqui serve para qualquer tipo de instancia mongodb, em qualquer provider, em qualquer cenário de deployment.
  4. É imprescindível para que funcione no teu cenário, ter um desktop ou servidor que simultaneamente tenha docker instalado, consiga fazer pull da imagem mongo e tenha acesso às instancias de Origem e Destiono.

Contexto

Eu hoje tenho 2 servidores na hetzner, o principal, oragon01 e o secundário que é vezes melhor que o primeiro chamado oragon02.

O Oragon01 me atende super bem, mas eu preciso de um segundo ambiente para testes, para poder quebrar, recriar, revisitar assuntos, testar novidades e serviu a esse propósito com o Envoy, por exemplo. Que é conteúdo que está chegando agora para a turma do Docker Definitivo.

Ele também hospedou a Jornada que é uma aplicação ASP.NET Core, conteinerizada, que usa Keycloak, MongoDB, Redis entre outras coisas.

Usar banco em containers não é algo que talvez você possa fazer. Mas não se grile com isso. Meu papel é recomendar para que você não faça. Se os dados fossem perdidos, ou houvesse alguma catástrofe, os demais serviços, que estão fora dessa infra, me suportariam para cuidar de todo o fluxo chamando a galera para um outro site, talvez hospedado até em um wordpress ou estático mesmo em HTML + CSS.

A questão é que sou o owner e o responsável, técnico, financeiro e jurídico desse ambiente portanto eu consigo lidar com esses riscos, entendo quando aceitar e quando não.

Agora eu preciso migrar esse projeto do servidor Oragon02 para o Oragon01 para liberar a máquina para meus estudos de Kubernetes e Dapr. E como fazer isso?

Como no Oragon01, eu já tenho uma instancia mongo disponível e com pouco consumo, seria mais inteligente, importar esses menos de 11MB de dados para o mongo antigo em vez de criar uma nova instancia dedicada para o projeto. Dessa forma, copiar os dados mapeados no disco deixou de ser uma opção.

O fluxo

Então, eu precisava rodar um dump a partir do Oragon02 para então realizar o restore em Oragon01.

E é aí que entra o mongodump. Um utilitário de linha de comando que acompanha a instalação do mongodb. Como o nome sugere, ele tem o papel de realizar um dump.

Do outro lado, para o restore temos o utilitário com nome também nada criativo: mongorestore.

Docker

Mais uma vez Docker e o Docker Hub salvam o dia. Foi com ele que fizemos todo o trabalho.

Dump / Backup

O dump foi realizado com mongodump, executado no comando abaixo:

docker run \
-it \
-v /mnt/c/path-backup:/backup \
mongo \
mongodump \
--uri="mongodb://usuario:[email protected]:porta/jornada?authSource=admin" \
--out=/backup/backup-2021-02-23

Entendendo o comando:

  • O docker run começa com o -it, para capturar o console e o output do container.
  • O volume está usando o mapeamento default do WSL para apontar o resultado para meu disco, no windows. Dentro do container esse path de backup está mapeado como /backup.
  • A imagem docker que usamos é a imagem MONGO.
  • O resto (mongodump….) na sentença do docker run representa o CMD. Ou seja “mongodump –uri=”mongodb://usuario:[email protected]:porta/jornada?authSource=admin” –out=/backup/backup-2021-02-23” é o CMD do comando docker run.

Usar o WSL direto me ajuda com os escapes dos paths. Isso continua sendo chatinho de tratar mesmo no bash no windows. Em uma experiência com o bash do WSL isso fica mais fácil e mais fluido.

Restore

Já aqui no restore, segui o mesmo desenho, agora usando o utilitário mongorestore.

docker run \
-it \
-v /mnt/c/path-backup:/backup \
mongo \
mongorestore --uri="mongodb://usuario:[email protected]:porta/jornada?authSource=admin" --db=jornada /backup/backup-2021-02-23/jornada

Considerações

O backup produziu uma pasta com o mesmo nome do database. Eu cheguei a tentar fazer um restore a partir do path de backups, mas o mongorestore reclamou. Então eu usei a pasta com o nome do database, e funcionou perfeitamente.

Conclusões

Eu não precisei instalar nada na minha máquina. E funcionou de forma super fácil. Aproveitei para documentar isso pois pode ajudar a alguém.

A natureza de poucos dados me possibilitou usar meu desktop como ponte. Cenários com grande volume de dados precisam de cuidados, inclusive, sobre latência.

Entender como esse universo funciona fez com que não fosse necessário nenhum tutorial. Apenas a doc foi suficiente para isso.

Enfim: Simples, rápido e fácil.

0 comentários

Enviar um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.

[docker de a a z]

Lives

Fique de olho nas lives

Fique de olho nas lives no meu canal do Youtube, no Canal .NET e nos Grupos do Facebook e Instagram.

Aceleradores

Existem diversas formas de viabilizar o suporte ao teu projeto. Seja com os treinamentos, consultoria, mentorias em grupo.