MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Fazer backup de um banco de dados MongoDB usando mongodump


Existem várias maneiras de fazer backup de um banco de dados no MongoDB. Uma maneira rápida de fazer backup de um banco de dados é usar o mongodump ferramenta.

mongodump lê dados de um banco de dados MongoDB e cria arquivos BSON de alta fidelidade que o mongorestore utilitário pode usar para restaurar um banco de dados MongoDB.

Com mongodump , você pode fazer backup de uma coleção, de um banco de dados ou de todos os bancos de dados.

Verificar ferramentas de banco de dados MongoDB


mongodump faz parte do pacote MongoDB Database Tools. As ferramentas de banco de dados do MongoDB são um conjunto de utilitários de linha de comando para trabalhar com o MongoDB.

Você pode ou não ter o MongoDB Database Tools/mongodump instalado. Tente executar o seguinte comando no seu Terminal ou Prompt de Comando para verificar:
mongodump --version

Se você não tiver, você pode usar as instruções de instalação no site do MongoDB para instalá-lo em seu sistema.

Onde executar os comandos?


Você precisa executar o mongodump comandos da linha de comando do seu sistema (por exemplo, um novo Terminal ou janela de prompt de comando).

Não os execute a partir do mongo Concha.

Fazer backup de todos os bancos de dados


Para fazer backup de todos os bancos de dados e coleções na instância local em execução na porta padrão 27017, use o mongodump comando sem argumentos.
mongodump

A execução do código acima despeja todos os bancos de dados em uma pasta chamada dump/ .

Observe que ele exclui o local e config bancos de dados.

Observe também que mongodump captura apenas os documentos no banco de dados. Quando você faz uma restauração, mongorestore ou mongod deve reconstruir os índices depois de restaurar os dados.

Aqui está a aparência dos arquivos no dump/ pasta.
tree dump

Resultado:
dump
├── PetHotel
│   ├── employees.bson
│   ├── employees.metadata.json
│   ├── owners.bson
│   ├── owners.metadata.json
│   ├── pets.bson
│   ├── pets.metadata.json
│   ├── pettypes.metadata.json
│   ├── players.bson
│   ├── players.metadata.json
│   ├── scores.bson
│   ├── scores.metadata.json
│   ├── students.bson
│   └── students.metadata.json
├── admin
│   ├── system.users.bson
│   ├── system.users.metadata.json
│   ├── system.version.bson
│   └── system.version.metadata.json
└── krankykranes
    ├── employees.bson
    ├── employees.metadata.json
    ├── products.bson
    └── products.metadata.json

Esses arquivos são obviamente específicos para minha instalação do MongoDB, que contém bancos de dados de teste. No meu caso, 3 bancos de dados foram despejados:PetHotel , admin , e krankykranes .

Fazer backup em um local específico


Você pode usar --out ou -o para especificar um local para colocar os arquivos para os bancos de dados despejados.

Exemplo:
mongodump --out=data/backups/

Ou:
mongodump -o=data/backups/

Nesse caso, cada pasta de banco de dados é enviada diretamente para o data/backups/ pasta (ou seja, não há /dump/ pasta).

Fazer backup de um banco de dados específico


Você pode usar o --db parâmetro para especificar um banco de dados para fazer backup.
mongodump --db=krankykranes

Isso despeja os krankykranes banco de dados para o padrão dump/ pasta.

Fazer backup de uma coleção específica


Você pode usar --collection ou -c para especificar uma coleção para fazer backup.

Exemplo:
mongodump --db=krankykranes --collection=products

Ou:
mongodump --db=krankykranes -c=products

Isso despeja os products coleção para o dump/krankykranes pasta.

Excluindo coleções


Você também pode usar o --excludeCollection parâmetro para especificar uma coleção específica para excluir do backup (ou seja, não incluir no backup).

Exemplo:
mongodump --db=PetHotel --excludeCollection=employees

Isso despeja todas as coleções do PetHotel banco de dados, exceto para os employees coleção.

Para excluir mais de uma coleção, use um --excludeCollection separado parâmetro para cada coleção que você deseja excluir.

Exemplo:
mongodump --db=PetHotel --excludeCollection=employees --excludeCollection=students

Isso exclui os employees e students coleções do backup.

Você também pode usar o --excludeCollectionsWithPrefix parâmetro para excluir coleções com um determinado prefixo.
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p

Isso despeja todas as coleções, exceto aquelas que começam com a letra p .

O seguinte exclui todas as coleções que começam com pet .
mongodump --db=PetHotel --excludeCollectionsWithPrefix=pet

Você pode usar vários --excludeCollectionsWithPrefix argumentos para excluir coleções com vários prefixos.

Exemplo:
mongodump --db=PetHotel --excludeCollectionsWithPrefix=p  --excludeCollectionsWithPrefix=s

Compactar a saída


Você pode usar o --gzip parâmetro para compactar a saída.
mongodump --gzip --db=krankykranes

Isso compacta os arquivos individuais.
tree dump

Resultado:
dump
└── krankykranes
    ├── employees.bson.gz
    ├── employees.metadata.json.gz
    ├── products.bson.gz
    └── products.metadata.json.gz

Podemos ver que todos os arquivos têm o .gz extensão.

Ao enviar para um arquivo compactado ou o fluxo de saída padrão, o --gzip opção compacta o arquivo morto ou a saída de dados para o fluxo.

Converter visualizações em coleções


Você pode usar o --viewsAsCollections parâmetro para exportar exibições somente leitura como coleções.
mongodump --db=PetHotel --viewsAsCollections

Quando você exporta uma visualização como uma coleção, mongodump produz um arquivo BSON contendo os documentos na visualização. Se você usa mongorestore para restaurar o arquivo BSON produzido, a visualização será restaurada como uma coleção.

Sem usar este argumento, mongodump exporta os metadados de cada visualização. Se você incluir o arquivo de metadados de uma visualização em um mongorestore operação, a visualização é recriada.

Usando --viewsAsCollections também omite todas as coleções padrão. Portanto, quando executo o código acima, meu dump/ estrutura de pastas fica assim:
tree dump

Resultado:
dump
└── PetHotel
    ├── pettypes.bson
    └── pettypes.metadata.json

No meu PetHotel banco de dados, tenho uma visão chamada pettypes . Quando exporto isso como uma visualização, apenas os metadados são exportados. Mas quando eu converto em uma coleção, um pettypes.bson é criado o arquivo que não estaria lá se eu tivesse exportado a exibição como uma exibição.

Aqui está o que acontece se eu exportar essa visualização sem convertê-la em uma coleção.
mongodump --db=PetHotel --collection=pettypes

Em seguida, execute o comando tree, para obter a estrutura de pastas.
tree dump

Resultado:
dump
└── PetHotel
    └── pettypes.metadata.json

Assim, podemos ver que apenas os metadados da exibição são despejados.

Modo Silencioso


Você pode usar o comando --quiet parâmetro para limitar a saída em sua janela Terminal ou Prompt de Comando.
mongodump --quiet

Sem usar isso, você provavelmente verá uma grande lista de visualizações, coleções, etc. com backup.

Modo detalhado


Por outro lado, você pode usar o --verbose ou -v parâmetros para aumentar a saída em sua janela Terminal ou Prompt de Comando.
mongodump --verbose

Você pode aumentar a verbosidade repetindo o -v forma várias vezes.

Exemplo:
mongodump -vvvv

Executando isso no meu sistema aumentou significativamente a verbosidade.

Resultados da consulta de backup


Você pode usar o --query ou -q parâmetros para despejar o resultado de uma consulta.

Exemplo:
mongodump --db=PetHotel --collection=pets --query='{ "type": "Dog" }'

Ao fazer isso, coloque a consulta entre aspas simples. Você pode usar aspas duplas para os campos.

Arquivos e saída padrão


Você pode usar o --archive ou parâmetro para gravar a saída em um arquivo especificado ou, se o arquivo não for especificado, na saída padrão (stdout ) para que você possa canalizar para outro processo.

Exemplo de saída para um arquivo compactado:
mongodump --archive=PetHotel.20201230.archive --db=PetHotel

No próximo exemplo, escrevo no fluxo de saída padrão e, em seguida, canalizo para mongorestore :
mongodump --archive --db=PetHotel --collection=pets --query='{ "type": "Dog" }' | mongorestore --archive  --nsFrom='PetHotel.pets' --nsTo='PetHotel.dogs'

Isso resulta em uma nova coleção chamada dogs aparecendo no PetHotel banco de dados (e a coleção contém apenas documentos que têm um type campo com um valor de dog ).

Controle de acesso


Os exemplos anteriores foram feitos na máquina local usando a porta padrão. Isso significa que fomos capazes de executar o mongodump sem especificar coisas como --host , --port , --username , etc

Aqui está um exemplo que usa esses parâmetros para autenticar como homer :
mongodump --host=myhost.example.com --port=37017 --username=homer --authenticationDatabase=admin --out=/backups/mongodump-2020-12-30

Também poderíamos ter usado o --password parâmetro, mas não o fizemos. Se você passar --user mas não --password , você será solicitado a fornecer a senha.

Mais informações sobre mongodump


O mongodump O utilitário aceita muitos outros parâmetros úteis e também há vários fatores a serem considerados ao usá-lo como parte de uma estratégia de backup e recuperação.

Veja o mongodump documentação no site do MongoDB para mais informações.

Outras opções


mongodump e mongorestore são ferramentas simples e eficientes para fazer backup e restaurar pequenas implantações do MongoDB, mas não são ideais para capturar backups de sistemas maiores.

Consulte Métodos de backup do MongoDB no site do MongoDB para outros métodos de backup de seus bancos de dados do MongoDB.