使用tar备份mongo文件系统时,使用复制集中的辅助文件,tar表示在tar进程中文件已更改,即使已运行lock命令。对于可靠的备份,这不应该发生。我缺少什么?
devtest:SECONDARY> use admin
switched to db admin
devtest:SECONDARY> db.fsyncLock()
{
"info" : "now locked against writes, use db.fsyncUnlock() to unlock",
"seeAlso" : "http://dochub.mongodb.org/core/fsynccommand",
"ok" : 1
}
使用find命令在tar进程运行时查找已更改的文件确认了这一点。使用diff比较这些文件的版本之前和之后也确认。它似乎总是这些文件。
/var/lib/mongo # find -cmin 1
.
./WiredTiger.turtle
./WiredTiger.wt
./diagnostic.data
./diagnostic.data/metrics.interim
使用Mongo 3.2和wiredtiger配置。
/etc/mongo.conf
storage:
directoryPerDB: true
dbPath: /var/lib/mongo
engine: "wiredTiger"
wiredTiger:
engineConfig:
directoryForIndexes: true
collectionConfig:
blockCompressor: snappy
journal:
enabled: true
文档似乎暗示文件不会被更改。也许只有“数据”文件不会改变......
https://docs.mongodb.com/v3.2/reference/method/db.fsyncLock/
在版本3.2中更改:db.fsyncLock()可以确保使用MMAPv1或WiredTiger存储引擎不会更改MongoDB实例的数据文件,从而为创建备份提供一致性。
在以前的MongoDB版本中,db.fsyncLock()无法保证WiredTiger的低级备份(例如,通过文件复制cp,scp,tar)的文件集是一致的。
答案 0 :(得分:0)
我猜mongodb仍然需要在数据运行时继续保存数据,但根据您的说法,备份您的数据似乎是安全的,因为没有任何更改您的收集数据。
但是,如果你不确定你总是db.shutdownServer()
会强制刷新到磁盘并停止服务,那么备份它然后再次启动mongod进程。