mongo(3.2):使用仍在文件系统上修改的fsyncLock()文件进行备份

时间:2016-12-08 13:38:52

标签: mongodb copy backup

使用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)的文件集是一致的。

1 个答案:

答案 0 :(得分:0)

我猜mongodb仍然需要在数据运行时继续保存数据,但根据您的说法,备份您的数据似乎是安全的,因为没有任何更改您的收集数据。

但是,如果你不确定你总是db.shutdownServer()会强制刷新到磁盘并停止服务,那么备份它然后再次启动mongod进程。