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

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


       数据库操作一直是一个比较敏感的话题,动不动“删库跑路”,可见数据库操作对于一个项目而言是非常重要的,我们有时候会因为一个游戏的严重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

image.gif

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

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

image.gif编辑

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

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

image.gif编辑

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

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

tar xzvf hins25976838_data_20230811084111.tar

image.gif

image.gif编辑

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

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

image.gif

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

    1. 备份下原来的mongod.conf,重新修改配置文件mongod.conf。
    cp /etc/mongod.conf /etc/mongod.conf.bak
    1. image.gif
    2. vim /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
    1. image.gif说明 云数据库MongoDB默认使用的是WiredTiger存储引擎,并且开启了directoryPerDB选项,因此配置中指定了这个选项,

    security:
               authorization: disabled
    1. image.gif为了方便起见,我这里不需要加入用户名和密码验证,可直接登录。

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

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

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

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


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

      千万不能使用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
      1. image.gif在Mongo Shell中,执行show dbs查询当前本地MongoDB中所有的数据库,以验证是否恢复成功,可以看到我想要恢复的数据库merge,然后这样,我就可以恢复某一个玩家的数据。 image.gif编辑
      2. 至此恢复工作已成功完成,您可以在Mongo Shell中执行exit命令退出Mongo Shell。
      相关文章
      |
      12月前
      |
      关系型数据库 MySQL 数据库
      阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
      阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
      1758 152
      |
      12月前
      |
      关系型数据库 MySQL 数据库
      阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
      阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。
      1187 156
      |
      存储 关系型数据库 分布式数据库
      PolarDB开源数据库进阶课5 在线备份
      本文介绍了如何在PolarDB RAC一写多读集群中进行在线备份,特别针对共享存储模式。通过使用`polar_basebackup`工具,可以将实例的本地数据和共享数据备份到本地盘中。实验环境依赖于Docker容器中用loop设备模拟的共享存储。
      565 1
      |
      12月前
      |
      关系型数据库 分布式数据库 数据库
      阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
      阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
      |
      存储 关系型数据库 MySQL
      利用Cron表达式实现MySQL数据库的定时备份
      以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
      489 15
      |
      关系型数据库 Shell 网络安全
      定期备份数据库:基于 Shell 脚本的自动化方案
      本篇文章分享一个简单的 Shell 脚本,用于定期备份 MySQL 数据库,并自动将备份传输到远程服务器,帮助防止数据丢失。
      |
      存储 SQL 安全
      【赵渝强老师】达梦数据库的物理存储结构
      本文介绍了达梦数据库的存储结构及各类物理文件的作用。达梦数据库通过逻辑和物理存储结构管理数据,包含配置文件(如dm.ini、sqllog.ini)、控制文件(dm.ctl)、数据文件(*.dbf)、重做日志文件(*.log)、归档日志文件、备份文件(*.bak)等。配置文件用于功能设置,控制文件记录数据库初始信息,数据文件存储实际数据,重做日志用于故障恢复,归档日志增强数据安全性,备份文件保障数据完整性,跟踪与事件日志辅助问题分析。这些文件共同确保数据库高效、稳定运行。
      849 0
      |
      NoSQL MongoDB 数据库
      数据库数据恢复—MongoDB数据库数据恢复案例
      MongoDB数据库数据恢复环境: 一台操作系统为Windows Server的虚拟机上部署MongoDB数据库。 MongoDB数据库故障: 工作人员在MongoDB服务仍然开启的情况下将MongoDB数据库文件拷贝到其他分区,数据复制完成后将MongoDB数据库原先所在的分区进行了格式化操作。 结果发现拷贝过去的数据无法使用。管理员又将数据拷贝回原始分区,MongoDB服务仍然无法使用,报错“Windows无法启动MongoDB服务(位于 本地计算机 上)错误1067:进程意外终止。”
      |
      缓存 NoSQL Linux
      在CentOS 7系统中彻底移除MongoDB数据库的步骤
      以上步骤完成后,MongoDB应该会从您的CentOS 7系统中被彻底移除。在执行上述操作前,请确保已经备份好所有重要数据以防丢失。这些步骤操作需要一些基本的Linux系统管理知识,若您对某一步骤不是非常清楚,请先进行必要的学习或咨询专业人士。在执行系统级操作时,推荐在实施前创建系统快照或备份,以便在出现问题时能够恢复到原先的状态。
      1340 79
      |
      存储 NoSQL MongoDB
      MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
      MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
      487 8
      MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉

      热门文章

      最新文章

      相关产品

    1. 云数据库 MongoDB 版
    2. 推荐镜像

      更多