文章目录

  • 1. 背景
  • 2. 备份方案
  • 方案一
  • mongodump备份
  • 前提
  • 执行备份
  • 注意
  • mongorestore恢复数据
  • 恢复在本地
  • 恢复在Atlas
  • 验证
  • gzip&archive选项
  • --archive选项
  • 好处
  • 方案二
  • 开启备份按钮
  • 结果
  • 3.参考


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

mongodb atlas mongodb 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文件处理完成了再进行下一个,速度慢了。

详细介绍请看参考链接四

mongodb atlas mongodb atlas 备份特别大_mongodb_02

方案二

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

开启备份按钮

先查看自己使用的是不是M2级别的,可以如下图这样查看。

mongodb atlas mongodb atlas 备份特别大_mongodb atlas_03


点击Edit Configuraiton之后,会看到自己级别,如下图:

mongodb atlas mongodb atlas 备份特别大_hive_04


如果你使用的是M2级别以上的,可以开启自动增量备份,可以确保备份通常仅比操作系统落后几秒钟,这个实时性是比用mongodump好得多的。

结果

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