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:
- Um servidor Ubuntu 20.04 com um usuário não root com permissões sudo e um firewall, que você pode configurar com o guia de configuração inicial do servidor Ubuntu 20.04.
- O MongoDB instalado e configurado usando o Como Instalar o MongoDB no Ubuntu 20.04.
- Um exemplo de banco de dados MongoDB importado usando as instruções em Como Importar e Exportar um Banco de Dados MongoDB.
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:
{"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
:
Em seguida, execute mongodump
:
Você verá uma saída como esta:
Output2020-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:
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
:
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:
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:
Insira a seguinte linha:
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):
Você verá uma saída como esta:
Output2020-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.