gpt4 book ai didi

mongodb - 我可以从 mongo oplog 恢复数据吗?

转载 作者:可可西里 更新时间:2023-11-01 09:58:41 27 4
gpt4 key购买 nike

我的 mongodb 今天被黑了,所有数据都被删除了,黑客需要一些钱才能取回,我不会付钱给他,因为我知道他不会把我的数据库还给我。

但我打开了 oplog,我看到它包含超过 300,000 个文档,保存了所有操作。

是否有任何工具可以从这些日志中恢复我的数据?

最佳答案

根据您的 oplog 有多远,您可以恢复部署。我建议备份您的当前状态 dbpath以防万一。

请注意,像这样进行恢复有很多变数,因此永远不能保证成功。可以使用 mongodump 来完成和 mongorestore ,但前提是您的操作日志可以追溯到时间的开始(即首次创建部署时)。如果是这样,您可能能够恢复您的数据。否则,您将在此过程中看到错误。

  1. 在执行任何其他操作之前保护您的部署。这种情况的出现是由于缺乏安全感。 MongoDB 中提供了广泛的安全功能。查看Security Checklist page了解详情。

  2. 使用 mongodump --host <old_host> --username <user> --password <pwd> -d local -c oplog.rs -o oplogDump 转储 oplog 集合 .

  3. 检查 oplog 的内容,使用 bsondump oplogDump/local/oplog.rs.bson 确定发生违规删除操作时的时间戳.您正在寻找一条看起来大致像这样的线:

    {"ts":{"$timestamp":{"t":1502172266,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"7041819298365940282"},"v":2,"op":"c","ns":"test.$cmd","o":{"dropDatabase":1}}

    这一行表示 dropDatabase()命令在 test 上执行数据库。

    记下 t {"$timestamp":{"t":1502172266,"i":1}} 中的值.

  4. 使用 mongorestore --host <new_host> --username <user> --password <pwd> --oplogReplay --oplogLimit=1502172266 --oplogFile=oplogDump/local/oplog.rs.bson oplogDump 恢复到安全的新部署

    注意 oplogLimit 的参数,这基本上是在告诉 mongorestore一旦达到该时间戳(这是第 3 步中 dropDatabase 命令的时间戳)就停止重放操作日志。

    oplogFile参数是 MongoDB 3.4 的新功能。对于旧版本,您需要复制 oplogDump/local/oplog.rs.bson到转储目录的根目录到名为 oplog.bson 的文件,例如oplogDump/oplog.bson并删除 oplogFile来自上面示例命令的参数。

在第 4 步之后,如果您的 oplog 回到时间的开始并且您在正确的时间停止了 oplog 重放,希望您应该在 dropDatabase 之前的那个点看到您的数据。命令已执行。

关于mongodb - 我可以从 mongo oplog 恢复数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45547340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com