Página inicial do Docs → Desenvolver aplicações → Manual do MongoDB
Faça backup de um cluster fragmentado com dumps de banco de dado
Para fazer um backup consistente de um cluster fragmentado com mongodump
, você deve primeiro parar o balancer, parar gravações e parar quaisquer operações de transformação de esquema no cluster. Isso garante que o cluster permaneça em um estado consistente durante o backup.
O MongoDB fornece operações de backup e restauração que podem ser executadas com o balancer e as transações em execução por meio dos seguintes serviços:
Antes de começar
Esta tarefa utiliza mongodump
para fazer backup de um cluster fragmentado. Certifique-se de ter um cluster em execução que contenha dados em coleções fragmentadas.
Compatibilidade de versão
Este procedimento requer uma versão do MongoDB que suporte o bloqueio de sincronização do mongos
.
A partir do MongoDB 5.0.22 os comandos fsync
e fsyncUnlock
podem ser executados em mongos
para realizar o bloqueio e desbloquear um cluster fragmentado.
Privilégios de administrador
Para executar estas tarefas, o usuário deve ter a autorização do fsync
, que permite ao usuário executar os comandos fsync
e fsyncUnlock
.
Passos
Para fazer um backup autogerenciado de um cluster fragmentado, conclua as seguintes etapas:
Encontre uma janela de backup
Para encontrar um bom horário para executar um backup, monitore o uso do aplicativo e do banco de dados para encontrar um horário em que é improvável que as operações de migração de blocos, refragmentação e transformação de esquema ocorram, pois podem causar um backup inconsistente.
Para obter mais informações, consulte Janela de agendamento de backup para clusters fragmentados.
Pare o balanceador
Para evitar que as migrações de chunks afetem o backup, conecte-se a mongos
e use o método sh.stopBalancer()
para interromper o balancer:
sh.stopBalancer()
Se uma rodada de balanceamento estiver em andamento, a operação aguardará a conclusão do balanceamento.
Para confirmar que o balanceador está parado, use o método sh.getBalancerState()
:
sh.getBalancerState()
false
O comando retorna false
quando o balanceador está parado.
Bloquear o cluster
O cluster fragmentado deve permanecer bloqueado durante o processo de backup para proteger o banco de dados contra gravações, o que pode causar inconsistências no backup.
Para bloquear um cluster fragmentado, conecte-se a mongos
e use o método db.fsyncLock()
:
db.getSiblingDB("admin").fsyncLock()
Para confirmar o bloqueio, no mongos
e no mongod
primário dos servidores de configuração, execute o seguinte pipeline de agregação e garanta que todos os shards estejam bloqueados:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } }, { fsyncLock: true } ] } }], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] )
[ { fsyncLocked: true }, { fsyncUnlocked: false } ]
Fazer backup
Para fazer o backup do cluster fragmentado, use mongodump
para se conectar ao mongos
e executar o backup:
mongodump \ --host mongos.example.net \ --port 27017 \ --username user \ --password "passwd" \ --out /opt/backups/example-cluster-1
Desbloqueie o cluster
Após a conclusão do backup, você poderá desbloquear o cluster para permitir que as gravações sejam retomadas.
Para desbloquear o cluster, use o método db.fsyncUnlock()
:
db.getSibling("admin").fsyncUnlock()
Para confirmar o desbloqueio, no mongos
e no mongod
primary dos servidores de configuração, execute o seguinte pipeline de agregação e garanta que todos os shards estejam desbloqueados:
db.getSiblingDB("admin").aggregate( [ { $currentOp: { } }, { $facet: { "locked": [ { $match: { $and: [ { fsyncLock: { $exists: true } }, { fsyncLock: true } ] } }], "unlocked": [ { $match: { fsyncLock: { $exists: false } } } ] } }, { $project: { "fsyncLocked": { $gt: [ { $size: "$locked" }, 0 ] }, "fsyncUnlocked": { $gt: [ { $size: "$unlocked" }, 0 ] } } } ] )
[ { fsyncLocked: false }, { fsyncUnlocked: true } ]
Reinicie o Balanceador
Para reiniciar o balancer, use o método sh.startBalancer()
:
sh.startBalancer()
Para confirmar que o balanceador está em execução, use o método sh.getBalancerState()
:
sh.getBalancerState()
true
O comando retorna true
quando o balanceador está em execução.
Próximos passos
Você pode restaurar um banco de dados a partir de um backup mongodump
usando mongorestore
.
Para restaurar um cluster fragmentado, execute
mongorestore
emmongos
.Para migrar para um conjunto de réplica ou servidor independente, execute
mongorestore
contramongod
.
Para mais informações, consulte Fazer Backup e Restaurar com as Ferramentas do MongoDB.