从 WiredTiger 文件恢复损坏的 mongo db

Posted

技术标签:

【中文标题】从 WiredTiger 文件恢复损坏的 mongo db【英文标题】:Restore corrupt mongo db from WiredTiger files 【发布时间】:2018-08-24 09:06:59 【问题描述】:

所以这是我的场景:

今天我的服务器被我们的主机重新启动(acpi 关闭)。 我的mongo数据库是一个简单的docker容器(mongo:3.2.18) 由于未知原因,容器在重新启动时未重新启动(restart: always 已在 docker-compose 中设置)。 我启动它,发现卷映射消失了。 我将它们恢复到旧路径,重新启动 mongo 容器,它启动时没有出现错误。 我连接到数据库,它完全是空的。
> show dbs
local  0.000GB
> use wekan
switched to db wekan
> show collections
> db.users.find();
>

另外我已经试过db.repairDatabase();,没有效果。

现在我的_data 目录包含很多 *.wt 文件等等。 (File list)

我发现 collection-0-2713973085537274806.wt 的文件大小约为 390MiB。

这可能是我需要恢复的数据,假设它的大小。

有什么方法可以恢复这些数据?

我已经根据this article 使用wt salvage 尝试了运气,但我无法让它运行 - 仍在尝试。

我知道备份,备份,备份!可惜这个数据库没有备份。

Related GitHub issue,包含软件的详细信息。


更新:

我能够使用WiredTiger Data Engine 工具创建一个.dump 文件。但是我无法将其导入 mongoDB。

【问题讨论】:

这个问题在***.com/questions/55117229/…回答 【参考方案1】:

尝试在 mongo db 容器上运行修复。它应该会修复您的数据库,并且数据应该会完全恢复。

以 bash 模式启动 mongo 容器。

sudo docker-compose -f docker-compose.yml run mongo bash

or

docker run -it mongo bash

进入 docker 容器后,运行 mongo db repair。

mongod --dbpath /data/db --repair

应成功修复数据库,并恢复所有数据。

【讨论】:

以上是关于从 WiredTiger 文件恢复损坏的 mongo db的主要内容,如果未能解决你的问题,请参考以下文章

mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复

mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复

mongodb集合被误删了,可以恢复吗

利用wt工具恢复wiredtiger存储引擎的数据

从损坏的 h2 数据库文件中恢复所有可能的信息

从损坏的 SQL Server 数据库中恢复事务日志