MongoDB Atlas的数据备份

1. 背景

业务要对mongodb数据进行备份,我对于分布式数据库还是知之甚少,写下这篇博客以记录我学习的过程;希望这篇能帮助到对mongodb备份毫无头绪而又不知道如何开始的同学。项目使用云数据库MongoDB Atlas来存储数据,所以以下的方案会着重描述对Atlas数据的备份。这里用的电脑是Mac M1芯片的,其实备份过程都是差不多。

2. 备份方案

  1. 方案一:利用mongodump&mongorestore来备份
  2. 方案二:使用Atlas提供的工具进行备份(付费)

方案一

mongodump备份

前提

  1. 如果想在本地去实践备份操作,在本地必须先安装MongoDB,因为mongodump&mongorestore命令是MongoDB数据库自带的备份恢复工具
  2. 确保Atlas实例开启了远程登录,并正确配置了白名单:在SECURITY的Network Access的IP Access List当中,写上你的IP;在这里插入图片描述
    一般都会有0.0.0.0/0,表示允许所有IP远程登录;
  3. 在进行dump和restore之前,需要确保你拥有了Atlas实例的read权限、以及本地MongoDB的readWrite权限;Atlas查看用户角色是在SECURITY里面的Database Access里面,本地的数据库可以用use xxxdb_name,show users来查看当前登录的用户是否有readWrite权限;
    在这里插入图片描述

执行备份

  1. 点击Mongodb Atlas的DEPLOYMNET里面的Database,点击展开…,如下图在这里插入图片描述
    复制里面的mongodump的链接
    在这里插入图片描述
  2. 打开mac的终端,粘贴链接,把PASSWORD,DATABASE信息换为你自己的,按回车键
  3. 结果:在当前目录下生成dump文件夹,此文件夹下有一个与一样的文件夹,再下面是一些BSON,JSON文件;

注意

  1. mongodump&mongorestore 是用于备份和还原小型 MongoDB 部署的简单高效的工具,但是对于捕获大型系统的备份而言并不是理想的选择。
  2. mongodump是支持全量备份+增量备份的,但是单实例的数据库没有oplog无法增量备份;如果想要增量备份,需要搭建副本集。
  3. 应用程序可以在 mongodump 捕获输出的同时继续修改数据,从开始备份到备份结束这段时间对正要备份的数据库的所有操作,都记录在oplog里,mongorestore恢复创建时带了–oplog选项,恢复后的数据已经含有这段时间新增/修改的数据了。
  4. mongorestore恢复数据时,必须重建索引。这个重建索引的操作不用手动完成,mongorestore自动做了。

mongorestore恢复数据

恢复在本地

  1. 在终端里面输入如下图的mongorestore命令
    在这里插入图片描述
  2. 其中,
    mongodb_host:本地mongodb的ip;
    mongodb_port:本地mongodb的端口号;
    username:本地mongodb中admin数据库权限校验用户名;
    database:恢复的Collection名称;
    database_backupfile_directory:数据库备份文件所在的目录,例如:./dump/blog/;
  3. 输入回车即可完成恢复;
  4. 注意:要是没删除原来的数据库就恢复,为了防止数据不一致,可以加上–drop选项,用于指定,恢复时如果对应数据库或者colleciton存在,则先删除然后在恢复,这样做的目的是保证恢复的数据和备份的数据一致;etc:mongorestore -utom -p123456 -h 192.168.0.52:27017 --authenticationDatabase admin -d testdb --drop ./node12_testdb/testdb/;-utom是指用户名字为tom

恢复在Atlas

在这里插入图片描述
复制mongorestore的链接,里面介绍了By default,默认是复制当前目录下的dump,如果想要复制其他目录下的文件,你就找到与DATABASE一样的那个文件夹的父目录,作为mongorestore命令的最后一个参数就行了。

  1. 我在mongodump的时候最后加上了选项,把复制的文件放到了tmp目录,而且还有一个复制时间的目录,时间目录下才是DATAVBASE相同的文件夹,如下图所示。
    在这里插入图片描述
    想要恢复这个market-cli-test目录下的数据,cd进入到tmp目录,输入下面的命令。这里就是输入market-cli-test的父目录作为最后一个参数
 mongorestore --uri mongodb+srv://firstUser:<PASSWORD>@cluster0.deeze6y.mongodb.net ./2023_01_05_17_44_53 

按下回车键,结果:数据恢复到Atlas上了。

验证

删除当前的库,然后执行mongorestore,看看能不能恢复数据;若能恢复就成功备份了,否则备份失败。

gzip&archive选项

–archive选项

  1. mongodump还有一个模式,就是–archive选项,上面我们说了,利用mongodump命令时,如果不加任何选项,则复制出来的文件格式是bson格式,如果一个数据库里面有很多集合,会导致文件很大,所以可以利用“–gzip”和“–archive”选项。例如我想复制一个名为market-cli-test的数据库,可以利用如下的命令:
#复制数据
mongodump --uri mongodb+srv://<USER>:<PASSWORD>@cluster0.deeze6y.mongodb.net/market-cli-test --gzip --archive=market-cli-test.archive 
#注意:这里加--archive之后,就不能再用--out选项了,这里应该在一个文件夹下直接操作,结果是在这个文件夹下面有一个.archive文件
#恢复数据
mongorestore --uri mongodb+srv://<USER>:<PASSWORD>@cluster0.deeze6y.mongodb.net --gzip --archive=market-cli-test.archive

好处

加上这两个选项有什么好处?–gzip压缩就不说了。说说–archive选项有啥好处?
加–archive选项,mongodump数据都在一个.archive文件中,还有就是这个.archive文件保存了索引。
第二就是restore的时候,加–archive选项的可以并行处理。如果是.bson文件的,则会一个.bson文件处理完成了再进行下一个,速度慢了。
详细介绍请看参考链接四
在这里插入图片描述

方案二

利用Atlas的工具,不过是付费的才有此服务。不过也不贵,M2级别的集群只需要9$/month。

开启备份按钮

先查看自己使用的是不是M2级别的,可以如下图这样查看。
在这里插入图片描述
点击Edit Configuraiton之后,会看到自己级别,如下图:
在这里插入图片描述
如果你使用的是M2级别以上的,可以开启自动增量备份,可以确保备份通常仅比操作系统落后几秒钟,这个实时性是比用mongodump好得多的。

结果

我也没有付费看过,不过我看了许多相关文章,总的来说就是Atlas会提供一系列的功能列表页面,可以完成自动增量,周期备份等功能,点击页面按钮,任你配置,比自己写一个shell更加便利。付费的好处就在这…

3.参考

  1. 了解如何写Linux Shell控制备份,如周期性备份,请戳MongoDB全量备份和增量备份
  2. 了解如何手动使用mongodump&mongorestore工具,请戳分布式文档存储数据库之MongoDB备份与恢复
  3. 了解MongoDB Atlas的付费备份方案,请戳MongoDB Atlas 付费监控内容
  4. 了解MongoDB的备份压缩和archive模式,请戳Archiving and Compression in MongoDB Tools

猜你喜欢

转载自blog.csdn.net/liuzr_/article/details/128203903