使用Wiredtiger恢复.每一个collection-*.wt文件都是一个记录.
该方法恢复数据需要Mongo版本大于>=3.2
环境准备
安装Mongo
sudo apt-get install mongodb
安装Wiredtiger
wget http://source.wiredtiger.com/releases/wiredtiger-3.0.0.tar.bz2
tar xvf wiredtiger-3.0.0.tar.bz2
cd wiredtiger-3.0.0
sudo yum install snappy-devel -y #如果是ubuntu则用 sudo apt-get install libsnappy-dev build-essential
./configure --enable-snappy
make
文件打包
将需要恢复的文件打包在一个目录下,暂且命名为dump(或者其他的,任意),其内应当包含的文件如下
collection-0--282010455938071573.wt # 要恢复的collection文件
_mdb_catalog.wt
sizeStorer.wt
storage.bson
WiredTiger
WiredTiger.basecfg
WiredTiger.lock
WiredTiger.turtle
WiredTiger.wt
或者
admin
local
config
#上面这三个都是数据库文件夹,也可以有其他数据库文件夹
***
WiredTiger.wt
sizeStorer.wt
storage.bson
_mdb_catalog.wt
WiredTiger
WiredTiger.basecfg
WiredTiger.lock
WiredTiger.turtle
***
WiredTigerLAS.wt
WiredTiger.wt.1
iocheck.dat
_tmp
# ***之间的文件为必须拥有的,没有的话可以在mongo目录下copy一份
恢复
切换到wiredtiger目录下
执行以下命令
sudo ./wt -v -h ../dump -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R dump -f ../collection.dump config/collection-27--1340615817856652461
# ../dump即是我们打包的文件夹
# ../collection.dump则是我们希望将待恢复文件dump出的文件位置及导出文件名,可自定义
# config/collection-27--1340615817856652461 则是待恢复文件. 这代表config数据库下的collection-27--1340615817856652461.wt文件 不要带有.wt后缀,否则会出错
# 这条命令执行完毕后终端是不会有返回信息的,而collection.dump文件里则会出现数据
下面需要将collection.dump载入到mongo中
# 首先在mongo中创建一条新记录
use anydb #数据库名随便起,后面的数据会载入到这个数据库中
db.back.insert({test: 1})
db.back.remove({})
db.back.stats() # 查看一下新记录的uri
# uri是类似这样的一条数据 "uri" : "statistics:table:collection-4--1715130797026980155",
# 而后关闭mongo,否则会载入失败
sudo service mongodb stop
# 执行以下命令载入collection.dump
# /var/lib/mongodb是mongo路径,在上面的操作中添加记录后这个路径下应当会存在一个collection-4--1715130797026980155.wt文件
sudo ./wt -v -h /var/lib/mongodb -C "extensions=[./ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" -R load -f ../collection.dump -r collection-4--1715130797026980155
# 这一步会将collection.dump中的数据替换到collection-4--1715130797026980155.wt中
# 开启mongo
sudo service mongodb start
# 如果开启失败,则进入mongo的目录(比如/var/lib/mongo),执行以下命令,而后重启mongo
sudo chown -R mongodb:mongodb /var/lib/mongodb
# 随便切换目录到一个路径,比如~/Documents
# 这个时候文件已经替换完毕,但是其中的记录可能暂时还无法查看,需要执行以下操作
mongodump
mongorestore --drop
# 而后便可以进入mongo shell查询数据
# 查询见下图