DEV Community

loading...

Criando e restaurando backup no MongoDB

Marcelo Michels
FullStack Developer
・3 min read

Criando backup

Para criar o backup precisamos estar em uma maquina com o Mongo instalado para ter acesso ao comando mongodump em nosso terminal. Com ele será possível fazer backup do próprio banco local ou de um banco remoto.

Criando o backup de todos os bancos existentes naquele servidor:

mongodump --uri "mongodb://mongodb0.example.com:27017" --gzip
# --uri  = string de conexão com o mongo  
# --gzip = indica que deseja gerar um backup compactado
Enter fullscreen mode Exit fullscreen mode

Criando o backup de um banco de dados especifico:

mongodump --uri "mongodb://mongodb0.example.com:27017" --gzip -d nomedobanco
# --uri  = string de conexão com o mongo  
# --gzip = indica que deseja gerar um backup compactado
# -d     = nome de um determinado banco, qual deseja-se fazer o backup  
Enter fullscreen mode Exit fullscreen mode

O resultado do comando mongo mongodump criará uma pasta chamada dump dentro do diretório qual foi executado o comando (exceto caso seja especificado um outro caminho).

Existem mais opções que podem ser adicionadas ao comando mongodump na documentação oficial.

Restaurando backup

Para restaurar o backup criado na etapa anterior vamos utilizar o comando mongorestore passando a string de conexão seguida da pasta qual contem o conteúdo gerado pelo mongodump anteriormente.

Restaurando um backup com vários bancos

mongorestore --uri "mongodb://mongodb0.example.com:27017" --gzip ./dump/
# --uri  = string de conexão com o mongo
# --gzip = indica que deseja gerar um backup compactado
Enter fullscreen mode Exit fullscreen mode

Restaurando um backup de um banco especifico

mongorestore --uri "mongodb://mongodb0.example.com:27017" --gzip ./dump/nomedobanco -d nomedobanco
# --uri  = string de conexão com o mongo
# --gzip = indica que deseja gerar um backup compactado
# -d     = nome de um determinado banco, qual deseja-se fazer o backup  
Enter fullscreen mode Exit fullscreen mode

Existem mais opções que podem ser adicionadas ao comando mongorestore na documentação oficial.

Script para criar o backup e salvar no AWS S3

Caso queira criar uma rotina de backup automatizado para executar o comando de backup periodicamente podemos criar um script para realizar essa tarefa.

Criar um arquivo shell script com o seguinte conteúdo:

mongodump --uri "mongodb://mongodb0.example.com:27017" --gzip
D=$(date '+%Y-%m-%d-%H')
zip -r $D.zip ./dump/
aws s3 cp $D.zip s3://<s3-bucket-name>/$D --profile michels
rm -rf ./dump/
rm -f $D.zip
Enter fullscreen mode Exit fullscreen mode

No exemplo acima estamos realizando as seguintes instruções em cada linha:

  1. Criar o backup do mongodb com mongodump.
  2. Declarar variável chamada "D" que vai armazenar a data atual no padrão "ANO-MES-DIA-HORA".
  3. Criar um .zip da pasta dump que foi criada no passo 1.
  4. Copiar pra um bucket do S3 o .zip criado no passo 3.
    1. Estou considerando que o aws cli já esteja instalado e configurado.
    2. Fique a vontade para utilizar outro serviço para essa etapa.
  5. Remover a pasta dump para não ficar lixo na pasta.
  6. Remover o arquivo .zip criado para não ficar lixo na pasta.

Agora, caso esteja utilizando linux, basta adicionar uma chamada para esse script dentro do crontab da maquina.

Leia mais sobre crontab aqui, com ele é possível executar tarefas no seu terminal periodicamente de forma bem dinâmica e flexível.

Um exemplo seria executar o nosso script de backup todos os dias as 2hrs e as 14hrs. Para isso basta executar o comando crontab -e em seu terminal e editar o arquivo aberto adicionando uma nova linha com o conteúdo abaixo:

0 2,14 * * * cd /path/to/script/ && sh backup-mongo-to-s3.sh
Enter fullscreen mode Exit fullscreen mode

Agora basta salvar o arquivo e quando chegar na hora configurada o arquivo backup-mongo-to-s3.sh será executado.

Conclusão

Neste post aprendemos criar e restaurar um backup do MongoDB, assim como agendar uma tarefa para executar esse backup periodicamente e salva-lo no S3 da AWS.

Discussion (0)