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.