Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

db.fsyncLock()

Nesta página

  • Definição
  • Comportamento
  • Exemplo
db.fsyncLock()

Limpa todas as escritas pendentes da camada de armazenamento para o disco e bloqueia o servidor para evitar escritas adicionais até que a trava seja liberada.

A partir do MongoDB 7.0.2 (também disponível a partir de 6.0.11 e 5.0.22) os métodos db.fsyncLock() e db.fsyncUnlock() podem ser executados em mongos para realizar o bloqueio e desbloquear um cluster fragmentado.

Importante

Método mongosh

Esta página documenta um método mongosh . Esta não é a documentação para comandos de banco de dados ou drivers específicos de idioma, como Node.js.

Para o comando do banco de dados, consulte o comando fsync.

Para drivers de API do MongoDB, consulte a documentação do driver MongoDB específica do idioma.

Para a documentação de shell legada do mongo, consulte a documentação para a versão correspondente do MongoDB Server:

mongo shell v4.4

Os servidores mantêm uma contagem de travas do fsync. O método fsyncLock() aumenta a contagem de bloqueios, e o método fsyncUnlock() a diminui. Para destravar escritas em um servidor ou cluster, chame o método fsyncUnlock() até que a contagem de bloqueios chegue a zero.

db.fsyncLock() tem a sintaxe:

db.fsyncLock()

A operação retorna um documento com os seguintes campos:

Campo
Descrição
info
Informações sobre o status da operação.
lockCount
Número de travas atualmente na instância.
seeAlso
Link para a documentação do comando fsync .
ok
O código de status.

db.fsyncLock() é um comando administrativo. Use esse método para bloquear um servidor ou cluster antes das operações de backup.

db.fsyncLock() garante que os arquivos de dados estejam seguros para cópia usando utilidades de backup de baixo nível, como cp, scp ou tar. Um mongod iniciado usando os arquivos copiados contém dados escritos pelo usuário que são indistinguíveis dos dados escritos pelo usuário no mongod bloqueado.

Os arquivos de dados de um mongod bloqueado podem mudar devido a operações como sincronizações do diário ou snapshots do WiredTiger. Embora isso não tenha efeito nos dados lógicos (por exemplo dados acessados pelos clientes), alguns utilidades de backup podem detectar essas alterações e emitir avisos ou não funcionar com os erros. Para obter mais informações sobre os procedimentos e utilidades de backup recomendados pelo MongoDB, consulte Métodos de backup do MongoDB.

Os bloqueios do Fsync são executados na primária em um conjunto de réplicas ou cluster fragmentado.

Se o primário ficar inativo ou ficar inacessível devido a problemas de rede, o cluster elege um novo primário dentre os secundários disponíveis. Se um primário com um bloqueio fsync ficar inativo, o novo primário não reterá o bloqueio fsync e poderá lidar com operações de gravação. Quando as eleições ocorrem durante as operações de backup, o backup resultante pode ser inconsistente ou inutilizável.

Para se recuperar da queda primária:

  1. Execute o método db.fsyncUnlock() até que a contagem de bloqueio atinja zero para liberar a trava em todos os nós.

  2. Execute o comando db.fsyncLock() para restabelecer o bloqueio do fsync no cluster.

  3. Reinicie o backup.

Além disso, as travas de sincronização são persistentes. Quando o primário antigo ficar online de novo, você precisará executar o comando db.fsyncUnlock() para liberar a trava no nó.

A seguinte operação executa db.fsyncLock():

db.fsyncLock()

A operação retorna o seguinte documento de status que inclui lockCount:

{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(1),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}

Se você executar db.fsyncLock() novamente, a operação incrementará lockCount:

{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"lockCount" : NumberLong(2),
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}

Para desbloquear a instância para escritas, execute db.fsyncUnlock() duas vezes para reduzir lockCount para 0.

← db.dropDatabase()