1. 本际云推荐 - 专业推荐VPS、服务器,IDC点评首页
  2. 云主机运维
  3. VPS运维

通过WT工具对Mongodb进行数据恢复

通过WT工具对Mongodb进行数据恢复

作为数据库运维人员,在数据库的备份策略不完善或遇到极端情况下,可能会导致数据库实例无法启动,从而需要恢复数据。在Oracle中,有一些隐含参数或方法可以强制启动数据库并恢复数据。但在Mongodb中,我们可以利用 WT 工具从损坏的数据文件中恢复数据。

通过WT工具对Mongodb进行数据恢复

数据恢复方法

首先,我们需要下载 WT 工具安装软件,该软件可以从 github 上下载(wiredtiger/wiredtiger),并安装其依赖包 Snappy 及 Snappy-devel。之后,编译并安装 WT 工具。

为了从数据文件中提取数据,我们需要保证 WiredTiger.wt 元数据文件未丢失,否则 WT 工具也无法恢复数据。当出现类似无法找到或打开 WiredTiger.wt 的错误时,我们可以使用 wt-v-h/data/mongodb-C”extensions=[/usr/local/wiredtiger/lib/libwiredtiger_snappy.so]”list 命令列出所有的对象名称。由于 WT 引擎默认使用 Snappy 压缩算法,需使用 extensions 显示指定 Snappy 的类文件位置。通过 /usr/local/wiredtiger/bin/wt-v-h/data/mongodb-C”extensions=[/usr/local/wiredtiger/lib/libwiredtiger_snappy.so]”dump-f/home/mongo/a.dmptest/collection/7-6614138329248103296 命令,我们可以从数据文件中导出数据。

但此时导出的文件不是 json 文件,无法直接读取,需要先导入一个临时数据库中。使用 showdbs 命令可以显示当前所有的数据库,使用 use test 命令可以切换到 test 数据库。然后,我们可以通过 db.createCollection(“test”) 和 showtables 创建和显示 test 数据库中的表。通过 db.test.stats().wiredTiger.uri 命令获取临时集合的数据文件信息。此时,需要关闭临时数据库,否则在导入时会出现资源忙的错误(shutdown)。使用 /usr/local/wiredtiger/bin/wt -v-h/data/mongodb1-C”extensions=[/usr/local/wiredtiger/lib/libwiredtiger_snappy.so]”-Rload-f/home/mongo/a.dmp-rtest/collection/0–2648066414802528487file:test/collection/0–2648066414802528487:100002 命令导入数据。启动数据库,并再次查询集合文档数据量,此时 count 可以正常显示。

数据恢复总结

在数据库运维过程中,应制定完善的运维方案,建立合适的数据库备份策略和容灾架构,以减少恢复数据的需要。但在极端情况下,WT 工具可以提供一种非常规的恢复数据方式。需要注意的是,WT 工具只能按集合逐一进行导出和导入数据,而 mongodump 和 mongorestore 可以按库多个集合同时修正元数据。

原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5851.html