Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

db.fsyncLock()

在此页面上

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

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

从MongoDB 7.1开始(也从7.0.2开始提供, 6.0.11和5.0 。 22 )的db.fsyncLock() db.fsyncUnlock()方法可以在mongos上运行,以锁和解锁分片集群。

重要

mongosh 方法

本页面提供 mongosh 方法的相关信息。这不是数据库命令或特定语言驱动程序(例如 Node.js)的相关文档。

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

如需了解 MongoDB API 驱动程序,请参阅特定语言的 MongoDB 驱动程序文档。

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

db.fsyncLock() 语法为:

db.fsyncLock()

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

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

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

此方法可用于以下环境中托管的部署:

  • MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本

  • MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本

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

锁定mongod的数据文件可能会因日志同步WiredTiger快照等操作而发生变化。 虽然这对逻辑数据(例如 客户端访问的数据),但某些备份实用程序可能会检测到这些更改并发出警告,或者失败并显示错误。 有关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