Docs 菜单
Docs 主页
/ /
Databases

db.fsyncLock()

db.fsyncLock()

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

从MongoDB 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

在此页面上