广告位联系
返回顶部
分享到

MongoDB的备份与恢复的介绍

MongoDB 来源:转载 作者:秩名 发布时间:2021-03-25 08:45:10 人浏览
摘要

任何数据库都离不开日常的备份与恢复,这二者是数据库安全的前提,MongoDB的备份与恢复方法一般而言都采用自带的工具来进行。 在开始讲述备份之前,需要首先了解两个概念,一个是恢复点目标、一个叫恢复时间目标,下面我们分别来看: 恢复点目标: (也叫RPO

任何数据库都离不开日常的备份与恢复,这二者是数据库安全的前提,MongoDB的备份与恢复方法一般而言都采用自带的工具来进行。

     在开始讲述备份之前,需要首先了解两个概念,一个是恢复点目标、一个叫恢复时间目标,下面我们分别来看:

  • 恢复点目标:

(也叫RPO,recovery point objective)

也就是数据可以恢复到哪个时间点,可以承受多少损失。

  • 恢复时间目标:

(也叫RTO,recover time objective),在发生故障的时候,数据库可以承受多长时间宕机。

有了这两个概念,就可以理解不同备份恢复方法可以满足的RPO和RTO是多少了。

来看备份工具:

Mongodump工具

在MongoDB中,mongodump工具通常用来做备份使用。它有如下特点:

1、可以对mongos和mongod进行操作

2、备份的是数据和数据结构,会以bson数据格式存储

3、不会备份索引,只会备份索引的元数据,只有在恢复的时候才会重建索引。

4、备份的过程中,mongodump会批量的将数据加载到内存中,该方法在数据量比较大的时候,会持续占用内存资源,会增加IO负载压力。

5、可以备份整个数据库、整个集合、部分集合内容

该工具的缺点:

1、仅仅适合备份小型的、或者单一数据库的备份

2、数据量大的时候,备份时间较长

关于Mongodump的命令使用方法,大家可以mongodump --help去查看,常用选项如下:

-p,--port:端口

-h,--host:IP地址

-d,--db:数据库

-c,--collection:备份的集合名称

-q,--query:备份数据的条件表达式

-o,--out:备份文件的存放位置

-u,--username:用户名

-p,--password:密码

--authenticationDataBase:认证数据库

具体的使用方法,下面有例子。

Mongorestore工具

   数据备份和数据恢复二者是不可分割的,因为数据的备份,本质上还是为了恢复准备的,如果备份的数据不能恢复,那么备份也就失去了意义。

    在MongoDB中,Mongorestore这个工具是用来做数据恢复的,数据恢复命令的常用参数如下:

与mongodump重复的部分不再赘述

-p,--port

-h,--host

-d,--db

-c,--collection

--dir:恢复文件存放的位置,如果指定了数据库文件夹或者集合文件,则只恢复当前数据库或者当前集合,如果没有指定,则恢复当前目录下所有备份数据。

--drop:恢复前会删除已有的数据库

-u,--user

-p,--password

--authenticationDatabase

下面来看样例:

数据备份举例

备份所有数据库
mongodump --port=27017 -h 127.0.0.1 -o /data/mongodb_backup -u root -p 123456
2020-11-23T23:40:41.599+0800 writing admin.system.users to
2020-11-23T23:40:41.626+0800 done dumping admin.system.users (3 documents)
2020-11-23T23:40:41.626+0800 writing admin.system.roles to
2020-11-23T23:40:41.651+0800 done dumping admin.system.roles (1 document)
2020-11-23T23:40:41.651+0800 writing admin.system.version to
2020-11-23T23:40:41.680+0800 done dumping admin.system.version (2 documents)
2020-11-23T23:40:41.680+0800 writing test.yeyz to
2020-11-23T23:40:41.680+0800 writing yeyz.test to
2020-11-23T23:40:41.726+0800 done dumping yeyz.test (2 documents)
2020-11-23T23:40:41.727+0800 done dumping test.yeyz (3 documents)

备份yeyz这一个数据库
[root@VM-0-14-centos ~]# mongodump -d yeyz --port=27017 -h 127.0.0.1 -o /data/mongodb_backup -u root -p 123456 --authenticationDatabase admin  
2020-11-23T23:41:58.991+0800 writing yeyz.test to
2020-11-23T23:41:59.050+0800 done dumping yeyz.test (2 documents)

备份yeyz数据库中的test集合中的name=ccc的记录
[root@VM-0-14-centos ~]# mongodump -d yeyz -c test -q '{name:{$eq:"ccc"}}' --port=27017 -h 127.0.0.1 -o /data/mongodb_backup -u root -p 123456 --authenticationDatabase admin
2020-11-23T23:43:24.473+0800 writing yeyz.test to
2020-11-23T23:43:24.501+0800 done dumping yeyz.test (1 document)
 

数据恢复举例

恢复前
> use yeyz
switched to db yeyz
> show tables;
test
> db.test.find()
{ "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" }
{ "_id" : ObjectId("5fa7f00e523d80402cdfa326"), "name" : "bbb" }

恢复后
> show tables;
test
test_recover
> db.test_recover.find()
{ "_id" : ObjectId("5fa7eae2515b814f18f2d474"), "name" : "ccc" }

我们成功的将上面的yeyz数据库中的test集合中的name=ccc的记录恢复到了test_recover这个集合当中。

物理备份

    物理备份的概念大家应该都理解,常用的方法是复制物理硬盘上的数据库文件。

    想要保证复制的物理文件和真实的数据库文件一致,需要保证当前数据库没有写入。如果数据库有写入,则复制的数据是不准确的。所以,物理复制必须在MongoDB实例停机状态或者锁定状态下进行。一般来讲,在MongoDB集群中,我们会使用锁定从库的办法来进行备份。

    通常情况下,使用:

db.fsyncLock()  锁定从数据库。

db.fsyncUnlock() 解锁数据库

    锁定从节点的数据库之后,在从节点上使用物理文件拷贝的方式进行备份即可。

    备份完成即可解锁数据库。

最后,数据备份的时候,如果有写入,那么备份的数据是否会不准确?例如下面这样:

如果我们的备份进度处在中间位置,即:

    A库备份完成的时候,B库没有开始备份

此时分别写入A库和B库两个文档,则最终的备份结果中,A库的数据没有新增的数据,B库的数据有新增的数据,就会产生数据的不一致。为了解决这个问题,备份一般都使用锁定数据库或者停止实例的方法来解决。

    在MongoDB中,可以在从库上进行锁定或者停止实例的备份操作,不建议在线上环境使用MongoDB单库,因为这种情况,备份恢复将会成为一个瓶颈问题。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 : https://cloud.tencent.com/developer/article/1753163
相关文章
  • MongoDB实现创建删除数据库、创建删除表(集合

    MongoDB实现创建删除数据库、创建删除表(集合
    一、 数据库使用 开启 mongodb 服务:要管理数据库,必须先开启服务,开启服务使用 1 mongod --dbpath c:\mongodb 管理 mongodb 数据库:(一定要在新
  • MongoDB数据库基本概念介绍

    MongoDB数据库基本概念介绍
    不管我们要学习什么数据库,都应该学习其中的基础概念,在MongoDB中基本的概念是文档、集合、数据库,下面挨个介绍。 下面的表格将会帮
  • MongoDB连接和创建数据库的方法

    MongoDB连接和创建数据库的方法
    一、连接MongoDB 在连接MongoDB前确保启动MongoDB服务,只需要在MongoDB安装目录的bin目录下执行mongo.exe即可。 执行启动操作后,mongodb在输出一些
  • 使用MongoDB操作文档

    使用MongoDB操作文档
    本篇文章中将讲解如何使用MongoDB操作文档。 文档的数据结构和JSON基本一致,所有存储在集合中的数据都是BSON格式。BSON是一种类似json格式
  • Laravel框架中使用MongoDB数据库的操作

    Laravel框架中使用MongoDB数据库的操作
    1、先确定好自己使用的哪个版本的 Laravel 框架,再决定 composer 哪一个的 MongoDB,我使用的是 Laravel 8 所以我 composer 了 3.8 的MongoDb 2、执行
  • SpringBoot整合mongoDB并自定义连接池的示例代码
    得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它可以很容易的操作mongoDB数据库。
  • 剖析后OpLog订阅MongoDB的数据变更就没那么难了

    剖析后OpLog订阅MongoDB的数据变更就没那么难了
    前言 我们开源了一个订阅分发mysql的binlog的项目,一直用的非常好,忽然有天开发说能不能支持MongoDB的数据订阅呢,MongoDB的使用度也挺广泛
  • MongoDB的备份与恢复的介绍
    任何数据库都离不开日常的备份与恢复,这二者是数据库安全的前提,MongoDB的备份与恢复方法一般而言都采用自带的工具来进行。 在开始讲
  • Oracle数据库下载与安装的完整步骤的介绍
    一、Oracle 数据库下载 访问 Oracle 数据库下载官网 选择目标版本数据库进行下载,本文以11gR2为例进行讲解。 访问Oracle 11gR2 下载官网https:/
  • 详解MongoDB操作符中的$elemMatch问题
    问题 如果MongoDB 数据库集合中仅存在一条记录 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 { _id : ObjectId( 5e6b4ef546b5f44e5c5b276d ), name : 赵小明 , us
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计