我的mongodb今天遭到黑客入侵,所有数据都被删除了,黑客需要一些金额才能收回,我不会付钱给他,因为我知道他不会把我的数据库发回给我。
但是我打开了oplog,我看到它包含超过30万个文档,保存了所有操作。
是否有可以从此日志恢复数据的工具?
答案 0 :(得分:4)
根据您的oplog的返回距离,您可以恢复部署。我建议您备份dbpath
的当前状态以防万一。
请注意,执行此类恢复有很多变量,因此成功绝不是保证。可以使用mongodump
和mongorestore
来完成,但前提是您的oplog回到开始时(即首次创建部署时)。如果是,您可以能够恢复您的数据。如果没有,您将在此过程中看到错误。
保护您的部署。这种情况是由于缺乏安全性而产生的。 MongoDB提供了广泛的安全功能。有关详细信息,请查看Security Checklist page。
使用mongodump --host <old_host> --username <user> --password <pwd> -d local -c oplog.rs -o oplogDump
转储oplog集合。
检查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}}
值。
使用mongorestore --host <new_host> --username <user> --password <pwd> --oplogReplay --oplogLimit=1502172266 --oplogFile=oplogDump/local/oplog.rs.bson oplogDump
注意oplogLimit
的参数,它基本上告诉mongorestore
一旦达到时间戳(这是步骤3中dropDatabase
命令的时间戳),就停止重放oplog。 / p>
oplogFile
参数是MongoDB 3.4的新参数。对于旧版本,您需要将oplogDump/local/oplog.rs.bson
复制到转储目录的根目录,并将其复制到名为oplog.bson
的文件,例如oplogDump/oplog.bson
并从上面的示例命令中删除oplogFile
参数。
在第4步之后,如果您的oplog回到开始时间并且您在正确的时间停止了oplog重播,那么您希望在执行dropDatabase
命令之前看到您的数据。< / p>