使用WT工具恢复MongoDB数据
众所周知MongoDB的底层存储是由WiredTiger
负责的,其数据文件也是.wt
格式。既然如此,我们就有可能不通过MongoDB服务,而是直接用wt
工具从数据文件中恢复数据。虽然我们通常推荐生产环境一定要配置复制集,但是很无奈,技术社区已经数次有人因为单机运行,最后硬盘损坏等原因导致无法启动。wt
工具作为最后一根稻草,可以在放弃治疗前再尝试挽救一下。
编译
wt工具可以运行于Linux和Windows上。因为各自的操作系统和MongoDB版本不同,可能产生较多的组合。在使用时应该根据自己情况编译适合的版本。下面以CentOS 7为例演示编译过程。
1.安装操作系统依赖
sudo yum install -y epel-release libtool automake snappy snappy-devel lz4 lz4-devel zstd zstd-devel libzstd-devel zlib zlib-devel git make vim-common
2. 准备源码
git clone https://github.com/wiredtiger/wiredtiger.git
根据所使用的MongoDB版本,应该选择正确的wt
分支。例如我当前使用的MongoDB 4.4.1
,那么同样应该选择WiredTiger的相应tagmongodb-4.4.1
> git tag | grep 4.4.1
mongodb-4.4.1
mongodb-4.4.1-rc0
mongodb-4.4.1-rc1
mongodb-4.4.1-rc2
mongodb-4.4.1-rc3
mongodb-4.4.10
mongodb-4.4.10-rc0
mongodb-4.4.11-rc0
> git checkout tags/mongodb-4.4.1 -b v4.4.1
3. 编译源码
sh autogen.sh
./configure --disable-shared --with-builtins=lz4,snappy,zlib,zstd
make -j $(nproc)
make install
简单起见我们使用了--disable-shared
来将动态链接库直接打包到执行文件中,这样可以避免很多后续的麻烦,代价是生成的执行文件较大。
编辑数据
如果有幸dbpath
中的其他文件没有丢失,包括:
WiredTiger*
要恢复的集合的
collection-xxx.wt
与要恢复集合相关的index文件
则可以直接使用wt工具恢复数据了:
wt dump file:collection-10--2280053313118266952.wt
不过,如果所有东西都还在的话,为什么还要用wt来恢复呢?所以我相信大部分人到这里都是跑不下去的。所以来看下一步,当你丢到只剩个裤衩子的时候该怎么办。
数据恢复
wt
读取数据的基本前提条件是要有元数据,也就是WiredTiger*
那堆文件。那我们就来尝试构造这些文件:
mkdir temp
cd temp
touch WiredTiger WiredTiger.lock
wt list
为了简单起见,后续步骤我们没有使用wt来完成,而是使用MongoDB:
mongod --dbpath ./
启动另一个窗口,使用mongo shell连接到当前实例:
mongo
任意创建一个集合,我们将把数据恢复到这个集合中:
db.dump.insert({x: 1});
db.dump.stats().wiredTiger.uri
# statistics:table:collection-7-666354062479792805
collection-7-666354062479792805.wt
即我们要使用的目标文件名。此时应:
停止mongod(直接ctrl-c)
使用我们要恢复的文件覆盖上述文件
cp collection-10--2280053313118266952.wt collection-7-666354062479792805.wt
让wt帮我们修复文件:
wt salvage file:collection-7-666354062479792805.wt
重启mongod进程:
mongod --dbpath ./
再次使用shell连接到MongoDB,在dump集合中即可找到我们要恢复的数据。
注意此时集合数据虽然恢复正常,但如果你count()就会发现返回结果是1。不用担心,这个问题很容易修复:
db.dump.validate({full: true});
下面该怎么办大家心里有数了吗?
关于作者:张耀星
MongoDB大中华区首席咨询顾问,供职于MongoDB售后服务团队5年+,拥有近10年MongoDB使用经验。
使用WT工具恢复MongoDB数据相关推荐
- 用wt文件恢复mongodb
安装 wt 工具 wget http://source.wiredtiger.com/releases/wiredtiger-3.0.0.tar.bz2tar xvf wiredtiger-3.0.0 ...
- 使用Wiredtiger恢复MongoDB中collection-x-xxx.wt文件数据
目录 问题: 1. 环境准备 1.1 安装MongoDB 1.2 安装Wiredtiger 1.3 文件打包 2. 恢复数据 1.『打捞』出可以被恢复的部分 2. 做些必要的数据格式调整 2.1 wt ...
- 版本管理工具Subversion Edge的备份恢复与数据迁移方案
软件开发生命周期中会使用到多种工具,这些工具的更迭与迁移,备份与恢复都构成了软件开发生命周期的重要部分.这篇文章以当下最新版本的Subversion Edge为例介绍一下其备份恢复与数据迁移方案,因相 ...
- 利用AUL工具恢复oracle dbf文件中的数据
本文参考:http://liumanghao.blog.163.com/blog/static/85408220077243382811/,在原文基础作部分改动. 问题:最近重做系统,忘记备份orac ...
- 利用PRM-DUL工具恢复oracle dbf文件中的数据
在使用oracle过程中如果一直没有有效的逻辑或物理RMAN备份则可能出现数据库损坏或丢失文件而没有任何备份可用的情况,例如丢失了CONTROL.CTL控制文件和SPFILE/PFILE参数文件的同时 ...
- easyrecovery工具2023最新版一键恢复丢失数据免费下载
通常,许多人会将工作或生活中的数据存储在我们的计算机上.很多时候,由于我们的误操作或其他一些问题,很容易错误地删除一些文件和数据.特别是,一些计算机故障总是会导致数据丢失,这是非常麻烦的.当需要重新安 ...
- 利用plsql工具恢复误删表和恢复误删数据
一.恢复误删表 1.执行以下sql语句,找到被自己误删的数据表对应的object_name: select * from user_recyclebin t;--查看被删掉的表 2.根据得到的obje ...
- mongodb数据合并设计_「时间序列数据」和MongoDB(二)-模式设计最佳实践
在上一篇博客文章时间序列数据与MongoDB:第一部分-简介中,我们介绍了时间序列数据的概念,然后介绍了一些可以用于帮助收集时间序列应用程序需求的发现问题.对这些问题的回答有助于指导支持大容量生产应用 ...
- mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复
mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复 数据类型 mongodb 3.x 数据容量 140 GB 故障类型 服务器断电导致WiredTiger.wt文 ...
最新文章
- commons-pool2-2.3 jar包_Java Jar包压缩、解压使用指南
- cnblogs url temp
- mybatisplus 结果_springboot整合mybatisPlus 乐观锁的实现
- 推荐系统中的召回算法--协同过滤
- 一文了解P2P的前世今生
- hdu - 4027 Can you answer these queries?
- boost::detail::invoke相关的测试程序
- python打印小猪佩琪_极度舒适的 Python 入门教程,小猪佩奇也能学会~
- 为什么安装了cmpp没法拖到工具栏_软件SU:简介、安装以及设置
- java中线程调度遵循的原则_Java 多线程(三) 线程的生命周期及优先级
- python 组合求和_39. 组合总和(Python)
- WPS Office 2019 For Linux 设置显示语言
- 囚徒困境、智猪博弈、纳什均衡与一致预期(博弈论入门学习笔记二)
- 淘宝、美团、滴滴分别如何搭建大数据平台
- nginx的日志格式记录真实客户端IP
- 卷积神经网络 图像识别,卷积神经网络 图像处理
- 如何旋转图片方法#ps教程#ps学习#ps修图抠图
- 【数据结构】基础:二叉树
- Qt 5.6.0-VS2015 版本 安装配置图文教程
- Dobot magician + realsense D435i 手眼标定(外参)