损坏的MongoDB中的打捞数据

时间:2015-06-22 07:36:50

标签: mongodb

我已经损坏的Mongo数据库,无论我尝试什么都无法恢复(尝试运行修复,没有工作)。

问题是,无论如何要从集合文件中至少挽救一些数据?数据库有大约1000万份文件,我想尽可能多地打捞。

MongoDump曾经能够直接对数据库文件工作,但从版本3.0和WiredTiger开始,它不再支持这个。有没有其他方法直接对集合文件工作,并至少读取一些数据?

2 个答案:

答案 0 :(得分:1)

好的,我们找到了一个非常棒的解决方案:

  • 下载WiredTiger source
  • 下载并安装Python
  • 下载SCONS
  • 下载Snappy compressor
  • 将snappy头文件放在“WiredTiger源文件夹”\ include
  • 将snappy dll和lib文件放在“WiredTiger源文件夹”\ lib

  • 将snappy dll和lib文件放在“WiredTiger源文件夹”下(重命名不带32或64的dll,所以它只有:snappy.dll和snappy.lib)

  • 运行scons.bat(位于“python install folder”\ Scripts下),以便工作目录为WiredTiger源文件夹
  • 我们必须更新WiredTiger源文件夹中的SConstruct文件,以便代替以下行:

      

    useSnappy = GetOption(“snappy”)

  • 我们使用以下行:

      

    useSnappy =“WIREDTIGER SOURCE FOLDER”

  • 整个过程的输出是一个支持snappy压缩器的wt.exe可执行文件

  • 然后我们在Mongo原始文件夹中为每个* .wt文件使用了wt.exe抢救文件名称
  • 我们必须从实际的MongoDB文件夹运行wt.exe,否则它对我们不起作用,如果您的db文件夹在网络共享上,则必须先将其映射到网络驱动器

在所有* .wt文件上运行wt.exe salvage后,我们再次运行MongoDB。

万岁!

答案 1 :(得分:0)

我遇到类似的问题,因为其中一个索引文件损坏,mongod无法启动。

在拍摄了损坏文件的快照后,我能够通过删除损坏的索引文件来运行修复。

rm index-2--2929746126664852663.wt
mongod --repair --storageEngine wiredTiger

Mongod然后对损坏的集合文件运行验证和抢救操作并自行关闭。