Como Fazer Backup, Restauração e Migração de um Banco de Dados MongoDB no Ubuntu 20.04

O autor selecionou o Fundo de Auxílio COVID-19 para receber uma doação como parte do programa Escreva para Doações.

Introdução

O MongoDB é um dos motores de banco de dados NoSQL mais populares. É famoso por ser escalável, robusto, confiável e fácil de usar. Neste artigo, você fará backup, restauração e migração de um banco de dados MongoDB de exemplo.

A importação e exportação de um banco de dados significa lidar com dados em um formato legível para humanos que seja compatível com outros produtos de software. Em contraste, as operações de backup e restauração do MongoDB criam ou usam dados binários específicos do MongoDB, que preservam não apenas a consistência e integridade dos seus dados, mas também seus atributos específicos do MongoDB. Assim, para migração, geralmente é preferível usar backup e restauração, desde que os sistemas de origem e destino sejam compatíveis.

Pré-requisitos

Antes de seguir este tutorial, certifique-se de completar os seguintes pré-requisitos:

A menos que observado o contrário, todos os comandos que requerem privilégios de root neste tutorial devem ser executados como um usuário não root com privilégios sudo.

Passo 1 — Usando JSON e BSON no MongoDB

Antes de continuar com este artigo, é necessário ter um entendimento básico do assunto. Se você tem experiência com outros sistemas de banco de dados NoSQL como Redis, pode encontrar algumas semelhanças ao trabalhar com o MongoDB.

O MongoDB utiliza formatos JSON e BSON (JSON binário) para armazenar suas informações. JSON é o formato legível por humanos que é perfeito para exportar e, eventualmente, importar seus dados. Você pode gerenciar ainda mais seus dados exportados com qualquer ferramenta que suporte JSON, incluindo um editor de texto simples.

Um exemplo de documento .json se parece com isto:

Example of JSON Format
{"address":[
    {"building":"1007", "street":"Park Ave"},
    {"building":"1008", "street":"New Ave"},
]}

O JSON é conveniente para trabalhar, mas não suporta todos os tipos de dados disponíveis no BSON. Isso significa que haverá a chamada ‘perda de fidelidade’ das informações se você usar JSON. Para fazer backup e restaurar, é melhor usar o BSON binário.

Em segundo lugar, você não precisa se preocupar em criar explicitamente um banco de dados MongoDB. Se o banco de dados que você especificar para importação ainda não existir, ele será criado automaticamente. Ainda melhor é o caso da estrutura das coleções (tabelas de banco de dados). Ao contrário de outros motores de banco de dados, no MongoDB, a estrutura é novamente criada automaticamente após a inserção do primeiro documento (linha de banco de dados).

Em terceiro lugar, no MongoDB, a leitura ou inserção de grandes quantidades de dados, como as tarefas deste artigo, pode ser intensiva em recursos e consumir muita CPU, memória e espaço em disco. Isso é crítico considerando que o MongoDB é frequentemente usado para grandes bancos de dados e Big Data. A solução mais simples para esse problema é executar as exportações e backups durante a noite ou em horas de menor movimento.

Quarto, a consistência das informações pode ser problemática se você tiver um servidor MongoDB ocupado onde as informações mudam durante o processo de exportação ou backup do banco de dados. Uma solução possível para esse problema é a replicação, que você pode considerar ao avançar no tópico MongoDB.

Embora você possa usar as funções de importação e exportação para fazer backup e restaurar seus dados, existem maneiras melhores de garantir a integridade total de seus bancos de dados MongoDB. Para fazer backup de seus dados, você deve usar o comando mongodump. Para restaurar, use mongorestore. Vamos ver como eles funcionam.

Passo 2 — Usando mongodump para fazer backup de um banco de dados MongoDB

Vamos cobrir primeiro o backup do seu banco de dados MongoDB.

Um argumento essencial para mongodump é --db, que especifica o nome do banco de dados que você deseja fazer backup. Se você não especificar um nome de banco de dados, mongodump fará backup de todos os seus bancos de dados. O segundo argumento importante é --out, que define o diretório para o qual os dados serão despejados. Por exemplo, vamos fazer backup do banco de dados newdb e armazená-lo no diretório /var/backups/mongobackups. Idealmente, teremos cada um de nossos backups em um diretório com a data atual como /var/backups/mongobackups/10-29-20.

Primeiro, crie esse diretório /var/backups/mongobackups:

  1. sudo mkdir /var/backups/mongobackups

Em seguida, execute mongodump:

  1. sudo mongodump --db newdb --out /var/backups/mongobackups/$(date +'%m-%d-%y')

Você verá uma saída como esta:

Output
2020-10-29T19:22:36.886+0000 writing newdb.restaurants to 2020-10-29T19:22:36.969+0000 done dumping newdb.restaurants (25359 documents)

Observe que, no caminho do diretório acima, você usou date +'%m-%d-%y' para obter automaticamente a data atual. Isso permitirá que você tenha backups dentro do diretório como /var/backups/10-29-20/, o que torna especialmente conveniente para automatizar backups.

Neste ponto, você tem um backup completo do banco de dados newdb no diretório /var/backups/mongobackups/10-29-20/newdb/. Este backup tem tudo para restaurar o newdb adequadamente e preservar sua chamada “fidelidade”.

Como regra geral, você deve fazer backups regulares, preferencialmente quando o servidor estiver menos carregado. Assim, você pode configurar o comando mongodump como uma tarefa cron para que ele seja executado regularmente, como todos os dias às 03:03 da manhã.

Para fazer isso, abra o crontab, o editor do cron:

  1. sudo crontab -e

Quando você executar sudo crontab, estará editando os trabalhos cron para o usuário root. Isso é recomendado porque se você definir os crons para seu usuário, eles podem não ser executados corretamente, especialmente se seu perfil sudo exigir verificação de senha.

Dentro do prompt do crontab, insira o seguinte comando mongodump:

crontab
  1. 3 3 * * * mongodump --out /var/backups/mongobackups/$(date +'\%m-\%d-\%y')

No comando acima, omitimos o argumento --db de propósito porque normalmente você vai querer fazer backup de todos os seus bancos de dados. Além disso, o caractere especial % deve ser escapado para estar em conformidade com a sintaxe do cron.

Dependendo do tamanho dos seus bancos de dados MongoDB, você pode acabar ficando sem espaço em disco com muitos backups. Por isso, também é recomendado limpar os backups antigos regularmente ou compactá-los.

Por exemplo, para excluir todos os backups mais antigos que sete dias, você pode usar o seguinte comando bash:

  1. find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Similar ao comando mongodump anterior, você também pode adicionar isso como um trabalho cron. Ele deve ser executado logo antes de você iniciar o próximo backup; para o trabalho das 03:03 AM, essa exclusão será executada às 03:01 AM. Abra o crontab novamente:

  1. sudo crontab -e

Insira a seguinte linha:

crontab
  1. 1 3 * * * find /var/backups/mongobackups/ -mtime +7 -exec rm -rf {} \;

Salve e feche o arquivo.

Ao completar todas as tarefas nesta etapa, você garantirá uma solução de backup adequada para seus bancos de dados MongoDB. Em seguida, você irá restaurar o banco de dados.

Passo 3 — Utilizando mongorestore para Restaurar e Migrar um Banco de Dados MongoDB

Ao restaurar seu banco de dados MongoDB a partir de um backup anterior, você terá uma cópia exata das informações do seu MongoDB em um momento específico, incluindo todos os índices e tipos de dados, o que é especialmente útil quando você deseja migrar seus bancos de dados MongoDB. Para restaurar o MongoDB, vamos usar o comando mongorestore, que funciona com os backups binários que o mongodump produz.

Vamos continuar nossos exemplos com o banco de dados newdb e ver como podemos restaurá-lo a partir do backup previamente realizado. Primeiro, especificaremos o nome do banco de dados com o argumento --nsInclude. Estaremos usando newdb.* para restaurar todas as coleções. Para restaurar uma única coleção, como restaurants, use newdb.restaurants em vez disso.

Então, usando --drop, vamos garantir que o banco de dados de destino seja primeiro excluído para que o backup seja restaurado em um banco de dados limpo. Como argumento final, especificaremos o diretório do último backup, que se parecerá com isso: /var/backups/mongobackups/10-29-20/newdb/.

Depois de ter um backup com carimbo de data e hora, você pode restaurá-lo usando este comando (atualizando a data para corresponder à sua):

  1. sudo mongorestore --db newdb --drop /var/backups/mongobackups/10-29-20/newdb/

Você verá uma saída como esta:

Output
2020-10-29T19:25:45.825+0000 the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead 2020-10-29T19:25:45.826+0000 building a list of collections to restore from /var/backups/mongobackups/10-29-20/newdb dir 2020-10-29T19:25:45.829+0000 reading metadata for newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.metadata.json 2020-10-29T19:25:45.834+0000 restoring newdb.restaurants from /var/backups/mongobackups/10-29-20/newdb/restaurants.bson 2020-10-29T19:25:46.130+0000 no indexes to restore 2020-10-29T19:25:46.130+0000 finished restoring newdb.restaurants (25359 documents) 2020-10-29T19:25:46.130+0000 done

No caso acima, estamos restaurando os dados no mesmo servidor onde criamos o backup. Se desejar migrar os dados para outro servidor e usar a mesma técnica, você deve copiar o diretório de backup, que é /var/backups/mongobackups/10-29-20/newdb/ em nosso caso, para o outro servidor.

Conclusão

Você agora realizou algumas tarefas essenciais relacionadas ao backup, restauração e migração de seus bancos de dados MongoDB. Nenhum servidor MongoDB de produção deve ser executado sem uma estratégia de backup confiável, como a descrita aqui.

Você pode encontrar mais tutoriais sobre como configurar e usar o MongoDB nestes artigos da comunidade DigitalOcean. Também incentivamos você a verificar a documentação oficial do MongoDB, pois é um ótimo recurso sobre as possibilidades que o MongoDB oferece.

Source:
https://www.digitalocean.com/community/tutorials/how-to-back-up-restore-and-migrate-a-mongodb-database-on-ubuntu-20-04