Docs 菜单

Docs 主页开发应用程序MongoDB Manual

db.fsyncLock()

在此页面上

  • 定义
  • 行为
  • 例子
db.fsyncLock()

将所有挂起的写入从存储层刷新到磁盘,并锁定服务器以防止任何其他写入,直到锁被释放。

从 MongoDB 7开始。 0 。 2 (也可以从6 . 0 . 11和5 . 0 . 22开始), db.fsyncLock()db.fsyncUnlock()方法可以在mongos上运行以锁定并解锁分片集群。

重要

mongosh 方法

本页介绍了 mongosh方法。这不是数据库命令或特定语言驱动程序(例如 Node.js)的文档。

有关数据库命令,请参阅 fsync 命令。

对于 MongoDB API 驱动程序,请参阅特定语言的MongoDB 驱动程序文档。

对于传统 mongo Shell 文档,请参阅相应 MongoDB Server 版本的文档:

mongo shell v4.4

服务器维护 fsync 锁计数。 fsyncLock()方法会递增锁计数,而fsyncUnlock()方法会递减锁计数。要解锁服务器或集群上的写入,请调用fsyncUnlock()方法,直到锁计数达到零。

db.fsyncLock() 语法为:

db.fsyncLock()

该操作返回一个包含以下字段的文档:

字段
说明
info
有关操作状态的信息。
lockCount
当前实例上的锁数量。
seeAlso
链接至 fsync 命令文档。
ok
状态代码。

db.fsyncLock()是管理命令。使用此方法在备份操作之前锁定服务器或集群。

db.fsyncLock()确保可以使用cpscptar等低级备份实用程序安全地复制数据文件。开始使用复制文件的mongod包含用户写入的数据,这些数据与锁定的mongod上的用户写入的数据无法区分。

锁定 mongod 的数据文件可能会因日志同步WiredTiger 快照等操作而发生变化。虽然这对逻辑数据(例如客户端访问的数据)没有影响,但某些备份实用程序可能会检测到这些变化并发出警告,或者失败并显示错误。有关 MongoDB 推荐备份实用程序和过程的更多信息,请参阅 MongoDB 备份方法

Fsync 锁在副本集或分片集群中的主节点上执行。

如果主节点因网络问题宕机或无法访问,集群会从可用的从节点中选举出新的主节点。如果带有 fsync 锁的主节点宕机,新的主节点不会保留 fsync 锁,并且可以处理写操作。备份操作过程中发生选举时,生成的备份可能不一致或无法使用。

要从主节点降级中恢复:

  1. 运行 db.fsyncUnlock() 方法,直到锁计数达到零,释放所有节点上的锁。

  2. 发出db.fsyncLock()命令以在集群上重新建立 fsync 锁。

  3. 重新启动备份。

此外,fsync 锁是持久的。当旧的主服务器再次联机时,您需要运行 db.fsyncUnlock() 命令来释放节点上的锁。

以下操作运行db.fsyncLock()

db.fsyncLock()

该操作将返回以下状态文档,其中包括 lockCount

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

如果再次运行db.fsyncLock() ,操作会递增lockCount

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

要解锁实例以进行写入,必须运行 db.fsyncUnlock() 两次以将 lockCount 减少到 0。

← db.dropDatabase()

在此页面上