fsync¶强制该mongod进程将所有未决的写操作从存储层刷新到磁盘,并锁定整个
mongod实例,以防止其他写操作,直到用户使用相应的释放该锁为止
fsyncUnlock。(可选)您可以fsync
锁定mongod实例并阻止写操作,以捕获备份。
当应用程序写入数据时,MongoDB会将数据记录在存储层中,然后在syncPeriodSecs
默认的60秒间隔内将数据写入磁盘。fsync当您要在该时间间隔之前刷新磁盘写入时运行。
该fsync命令具有以下语法:
该fsync命令具有以下字段:
| 领域 | 类型 | 描述 |
|---|---|---|
fsync |
整数 | 输入“ 1”以应用fsync。 |
async |
布尔值 | 可选的。fsync异步运行。默认情况下,该
fsync操作是同步的。 |
lock |
布尔值 | 可选的。锁定mongod实例并阻止所有写入操作。每个fsync带lock操作的都需要一个锁。 |
要运行fsync命令,请使用以下
db.adminCommand()方法:
fsync使用命令lock选项可以确保数据文件的安全使用低级别的备份实用程序,如复制cp,scp或
tar。一mongod开始使用复制的文件包含从上锁定用户写入的数据无法区分用户写入的数据mongod。
锁定的数据文件mongod可能由于诸如日记同步或
WiredTiger快照之类的操作而改变。尽管这对逻辑数据(例如,客户端访问的数据)没有影响,但是某些备份实用程序可能会检测到这些更改并发出警告或失败并出现错误。有关MongoDB推荐的备份实用程序和过程的更多信息,请参阅
MongoDB备份方法。
如果您mongod已经日记启用,请使用文件系统或卷/块级快照工具一起创建数据集的备份和日志作为一个单元。
fsync与¶lock: true在版本3.4中进行了更改:该命令现在
在返回文档中返回a 。{ fsync: 1, lock: true }lockCount
在上运行后,所有写操作都将阻塞。所述外壳提供了一个辅助的方法。{ fsync: 1, lock: true }mongodmongodb.fsyncLock()
注意
该操作保持锁定计数。每个操作都会增加锁定计数。{ fsync: 1, lock: true }{ fsync: 1, lock: true }
要解锁mongod实例以进行写入,锁定计数必须为零。也就是说,对于给定数量的操作,必须发出相应数量的解锁操作才能解锁实例以进行写入。要解锁,请参见。{ fsync: 1, lock:
true }db.fsyncUnlock()
fsync默认情况下,该操作是同步的。要fsync异步运行
,请使用async设置为的字段
true:
操作立即返回。要查看fsync操作状态
,请检查的输出
db.currentOp()。
mongod实例¶注意
fsync使用命令lock选项可以确保数据文件的安全使用低级别的备份实用程序,如复制cp,scp或
tar。一mongod开始使用复制的文件包含从上锁定用户写入的数据无法区分用户写入的数据mongod。
锁定的数据文件mongod可能由于诸如日记同步或
WiredTiger快照之类的操作而改变。尽管这对逻辑数据(例如,客户端访问的数据)没有影响,但是某些备份实用程序可能会检测到这些更改并发出警告或失败并出现错误。有关MongoDB推荐的备份实用程序和过程的更多信息,请参阅
MongoDB备份方法。
的主要用途fsync是锁定mongod
,才能在备份的文件实例mongod的dbPath。该操作将所有数据刷新到存储层,并阻止所有写操作,直到您解锁mongod实例为止。
要锁定数据库,请使用lock设置为的字段true:
该操作返回的文档包括操作的状态和lockCount:
您可以继续对mongod具有fsync锁定的实例
执行读取操作。但是,在第一次写操作之后,所有后续的读操作都将等到您解锁mongod实例。
重要
该操作保持锁定计数。{ fsync: 1, lock: true }
要解锁mongod实例以进行写入,锁定计数必须为零。也就是说,对于给定数量的操作,必须发出相应数量的解锁操作才能解锁实例以进行写入。{ fsync: 1, lock:
true }