MacOS 下MongoDB非正常关闭后无法启动,无法repair后,如何进行数据恢复的方法之一

网上有很多各种各样恢复数据的方法,本文只是其中的一种。希望对您有所帮助!

我的环境 macOS,mongodb-macos-4.4.12

由于非正常关闭 mongodb,导致mongodb无法启动,并进行了恢复操作

mongod --dbpath /usr/local/opt/mongodb-4.4.12/data --repair

但并没有什么效果。(之前最好先把需要恢复的 data 数据进行备份,预防在后续操作时,误伤!!

这种方法是通过安装新的MongoDB来把之前的旧数据进行恢复。

1、安装新的MongoDB

(我的两个MongoDB版本都是mongodb-4.4.12,如果你的版本比较低,建议使用稍微高版本,更高版本的修复能力要优于低版本)

安装配置步骤,自行百度。

我的旧版本MongoDB data是

/usr/local/opt/mongodb-4.4.12/data

新版本MongoDB data是

/usr/local/opt/mongodb-macos-4.4.12/data

上面这个路径也是mongodb-macos-4.4.12版本的数据存放路径

2、准备恢复数据

在这里创建一个old-db目录,存放需要恢复的wt数据(把/usr/local/opt/mongodb-4.4.12/data下所有文件copy到/usr/local/opt/mongodb-macos-4.4.12/old-db下即可)

  • 新数据库集合文件存储在: /usr/local/opt/mongodb-macos-4.4.12/data
  • 旧数据库集合文件存储在: /usr/local/opt/mongodb-macos-4.4.12/old-db

新版本MongoDB的mongo4.conf  这里要注意的是dbpath,其他的根据自己需求来配置。

port=27017
dbpath=/usr/local/opt/mongodb-macos-4.4.12/data
logpath=/usr/local/opt/mongodb-macos-4.4.12/log/mongod.log
#使用追加的方式写日志
logappend=true
#以守护程序的方式启用,在后台运行
fork=true
#最大同时连接数
maxConns=100
#启用验证
#auth=true
#每次写入会记录一条操作日志(通过journal可以重新构造出写入的数据)
journal=true
#存储引擎有mmapv1、wiretiger、mongorocks,即使宕机,启动时wiredtiger会先将数据恢
复到最近一次的checkpoint点,然后重放后续的journal日志来恢复
storageEngine=wiredTiger
#这样就可外部访问了,例如从win10中去连虚拟机中的MongoDB
bind_ip = 0.0.0.0

 启动新的MongoDB

/usr/local/opt/mongodb-macos-4.4.12/bin/mongod  -f /usr/local/etc/mongo4.conf

进入MongoDB

/usr/local/opt/mongodb-macos-4.4.12/bin/mongo

创建一个新数据库 Recovery 如图中 1,

创建一个新集合 db.newDummyCollection1.insert({arbitrary: “value”}) 如图中2,但返回错误,查看日志后,提示需要创建一个密码的账号。

继续创建新集合 如图中1

查看新集合newDummyCollection1的  wt文件 存放位置   

db.newDummyCollection1.stats()

看图中 2、3、4 文件名是 collection-3-6142870980381766003 记住它

正确关闭数据库

use admin;
db.shutdownServer();

 

 我们恢复 /usr/local/opt/mongodb-macos-4.4.12/old-db/ccollection-0-9171135440959103747.wt这个文件

把这个文件复制data目录,并覆盖collection-3-6142870980381766003.wt这个文件

cp /usr/local/opt/mongodb-macos-4.4.12/old-db/collection-4--4303180055920831045.wt /usr/local/opt/mongodb-macos-4.4.12/data/collection-3-6142870980381766003.wt

把这个旧数据 恢复到刚刚创建的集合中

 

下面进行数据修复:

/usr/local/opt/mongodb-macos-4.4.12/bin/mongod --dbpath /usr/local/opt/mongodb-macos-4.4.12/data --repair

执行完后,再次开启MongoDB服务,

 /usr/local/opt/mongodb-macos-4.4.12/bin/mongod  -f /usr/local/etc/mongo4.conf

并通过 MongoDB Compass 查看 Recovery中newDummyCollection1的数据是否恢复

如果有多个数据库,就参照上面方法慢慢恢复吧。经过实测确实把数据恢复回来了。

以上 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值