记录一次有残缺的mongo数据文件误删恢复过程

记录一次有残缺的mongo数据文件误删恢复过程

  • 前言
  • 修复过程

前言

在云端(A服务器)上用docker部署了一个mongdb,现在需要从另一个云服务器(B服务器)上把项目和数据都迁移到A服务器,但是当初在挂载mongo的数据卷的时候,没有充分考虑到分区大小的问题,导致“/”下剩余空间不够支撑B上数据的迁入,所以需要把A服务器上的mongo的挂载目录迁移到“/data”下。
于是我在mongo不停止的情况下,直接把“/”下的db文件包cp到了“/data”下,其实这样cp过来的文件肯定是不能用的,因为mongo没有停止,一直有数据在插入,而mongo的文件记录是分为实际数据文件和元数据文件、索引数据文件的,也就是说会导致元数据文件会和实际数据文件不匹配。==我也犯贱,之前已经测试过一次不行了,想着想再测试一次,用cp的数据重新起了一个mongo实例,然后测试结果确实是不行的,会报***“unable to read root page from file:sizeStorer”*** ,然后我把新的实例删除,把挂载的文件目录删掉。然而!!!!!我当时在的位置是在“/”下的db,而不是“/data”下的db,也就是说我把原来的数据文件给删了,留下了一个不能启动的数据文件,这就鸡儿操蛋了。没办法,一顿google,然而大多数的解决方案就是解决 数据类的wt文件和WiredTiger.wt文件出问题的情况,根本不适合我这种sizeStorer文件有问题的情况。一个看似能解决的就是mongo自带的repair功能了。

修复过程

由于服务器上是由docker安装的mongo,本地没有,不方便测试,把文件都拷贝到了虚拟机,安装mongo,运行 mongod–repair --dbpath /mongo_file_url 来修复文件,会有一个修复过程,期间如果没有报错,便会顺利的启动,然后用第三方工具连接,数据又都回来了!!!

你可能感兴趣的:(mongodb,mongodb,linux)