【问题标题】:mongodump --oplog and per database restoremongodump --oplog 和每个数据库还原
【发布时间】:2017-10-09 15:01:07
【问题描述】:

我需要能够恢复一个单个数据库,甚至是备份中的单个集合。由于mongodump --oplog 仅适用于完整实例(副本集),因此我进行了以下过程以仅过滤我想要从由生成的 oplog.bson 恢复的数据库中的条目 -- oplog 选项。 有人可以告诉我这是正确的还是我遗漏了什么?

  1. 首先我只恢复我需要的数据库(在这个例子中数据库是 test

    mongorestore -d test dump/test

  2. 将 --oplog 选项生成的 oplog.bson 文件恢复到随机集合中

    mongorestore -d oplog -c oplog dump/oplog.bson

  3. 从恢复的 oplog.bson 集合中仅转储引用我正在恢复的数据库的文档

    mongodump -d oplog -c oplog -q "{ns:/^test[.]/}" -o oplog

  4. 使用带有过滤操作的最后转储使用 --oplogReplay 选项进行恢复

    mongorestore --oplogReplay oplog/oplog

  5. 最后我删除了临时 oplog 集合。

    mongo --eval "db.getSisterDB('oplog').dropDatabase()"

提前致谢!

【问题讨论】:

    标签: mongodb backup mongodump mongorestore mongodb-oplog


    【解决方案1】:

    基本上,这是一种方法。或者您可以在转储特定数据库后做额外的export

    mongoexport -d local -c oplog.rs --query="{ns:/^test[.]/}" -o oplog.dump
    
    2017-10-10T11:51:50.780+0300    connected to: localhost
    2017-10-10T11:51:51.737+0300    local.oplog.rs  0
    2017-10-10T11:51:51.938+0300    local.oplog.rs  3
    2017-10-10T11:51:51.938+0300    exported 3 records
    

    你现在有直接的json转储文件,你可以读回什么

    【讨论】:

    • 感谢您的回复。如果我的方法有效,我想我会坚持下去,因为我最终得到的 oplog 部分要小得多。考虑到 oplog.rs 通常是一个大集合并且没有索引,因此为每个数据库进行导出将花费更多
    • 实际上,您可以导出整个 oplog.rs(不带 --query)并在 mongoimport 处使用 grep 命令导入只需要的行.. ;-) egrep '"ns":"test.*' oplog2.dump | mongoimport -d X -c x
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多