如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库
  bVknJsYcQFkD 2023年11月02日 78 0


        数据库操作一直是一个比较敏感的话题,动不动“删库跑路”,可见数据库操作对于一个项目而言是非常重要的,我们有时候会因为一个游戏的严重bug或者运营故障要回档数据库,而你们刚好使用的是阿里云的Mongodb,那么这篇文章将给你提供一个思路(或许你按照阿里云官网的文档一顿操作下来,并不是那么顺利,有一些报错,无法登录...)

         在恢复数据之前,你要先知道你产线环境使用mongodb服务器的版本是多少,然后本地部署安装对应版本的数据库,以避免版本兼容问题引发的一些异常:

1.数据库版本要求

云数据库MongoDB版实例的版本必须对应自建MongoDB数据库的版本。二者之间的对应关系如下:

MongoDB实例

自建MongoDB数据库

3.2版本

3.2或3.4版本

3.4版本

3.4版本

4.0版本

4.0版本

4.2版本

4.2版本

 注意,我建议你使用linux系统来部署对应的mongo版本,这里我以v4.2.23为例

[root@localhost data]# mongod --version
db version v4.2.23
git version: f4e6602d3a4c5b22e9d8bcf0722d0afd0ec01ea2
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
allocator: tcmalloc
modules: none
build environment:
    distmod: rhel70
    distarch: x86_64
    target_arch: x86_64

2.下载解压物理备份并赋权限  

 你的备份文件可以通过阿里云后台来直接下载:

如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库_数据库

 点击下载可下载到本地,或者你通过wget+下载链接下载到本地。 

然后创建一个mongodb恢复的目录,mkdir /data/mongo

如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库_mongodb_02

 将下载的系统备份文件压缩包放到/data/mongo目录下

比如我的压缩包名是hins25976838_data_20230811084111.tar

tar xzvf hins25976838_data_20230811084111.tar

如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库_Shell_03

 注意,一般mongo服务器是需要mongod的用户组和用户权限的,所以,如果你是这种情况,建议你使用

chown mongod /data/mongo -R  && chgrp mongod /data/mongo -R && chmod 755 /data/mongo

3.以单节点模式恢复MongoDB物理备份的数据

  1. 备份下原来的mongod.conf,重新修改配置文件mongod.conf。
cp /etc/mongod.conf /etc/mongod.conf.bak

vim 

  1. /etc/mongod.conf打开mongod.conf文件。 根据云数据库MongoDB版的存储引擎选择启动的配置模板,您可以将其复制到mongod.conf文件中。
    说明 配置文件设置了启动模式为单节点模式并开启认证功能
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log

# Where and how to store data.
storage:
  dbPath: /data/mongo
  directoryPerDB: true
#  engine:
#  wiredTiger:

# how the process runs
processManagement:
  fork: true  # fork and run in background
  pidFilePath: /var/run/mongodb/mongod.pid  # location of pidfile
  timeZoneInfo: /usr/share/zoneinfo

# network interfaces
net:
  port: 27017
  #bindIp: 0.0.0.0 #127.0.0.1  # Enter 0.0.0.0,:: to bind to all IPv4 and IPv6 addresses or, alternatively, use the net.bindIpAll setting.
  unixDomainSocket:
        enabled: false

security:
    authorization: disabled

说明 云数据库MongoDB默认使用的是WiredTiger存储引擎,并且开启了directoryPerDB选项,因此配置中指定了这个选项,
 

security:
           authorization: disabled

为了方便起见,我这里不需要加入用户名和密码验证,可直接登录。

4.单节点模式启动并登录

 

  1. 指定新建的配置文件mongod.conf来启动MongoDB。
mongod -f /etc/mongod.conf
  1. 你启动过程中可能会遇到如下报错信息:这种应该是之前没有正常关闭mongodb引起的,比如直接 kill -9 <pid>导致,

解决方法:

找到mongod.lock文件,并删除mongod.lock。

如果启动仍然报错,建议再使用修复方式来启动

mongod -f /etc/mongod.conf --repair

千万不能使用kill -9 <pid>,因为MongoDB使用mmap方式进行数据文件管理,也就是说写操作基本是在内存中进行,写操作会被每隔60秒(syncdelay设定)的flush到磁盘里。如果在这60秒内flush处于停止事情我们进行kill -9那么从上次flush之后的写入数据将会全部丢失。 如果在flush操作进行时执行kill -9则会造成文件混乱,可能导致数据全丢了,启动时加了repair也无法恢复。

  1. 等待启动完成后,执行如下命令登录MongoDB数据库,进入Mongo Shell。
mongo --host 127.0.0.1:27017

在Mongo Shell中,执行show dbs查询当前本地MongoDB中所有的数据库,以验证是否恢复成功,可以看到我想要恢复的数据库merge,然后这样,我就可以恢复某一个玩家的数据。 

如何将阿里云WiredTiger引擎的MongoDB物理备份文件恢复至自建数据库_Shell_04

  1. 至此恢复工作已成功完成,您可以在Mongo Shell中执行

exit

  1. 命令退出Mongo Shell。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
bVknJsYcQFkD