网上有很多各种各样恢复数据的方法,本文只是其中的一种。希望对您有所帮助!
我的环境 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的数据是否恢复
如果有多个数据库,就参照上面方法慢慢恢复吧。经过实测确实把数据恢复回来了。
以上