广告
返回顶部
首页 > 资讯 > 数据库 >MongoDB备份恢复笔记
  • 645
分享到

MongoDB备份恢复笔记

2024-04-02 19:04:59 645人浏览 泡泡鱼
摘要

1、全量逻辑备份/恢复 MonGodump/Mongorestore对于数据量比较小的场景,使用官方的mongodump/mongorestore工具进行全量的备份和恢复就足够了。mongodump可以连上

1、全量逻辑备份/恢复 MonGodump/Mongorestore

对于数据量比较小的场景,使用官方的mongodump/mongorestore工具进行全量的备份和恢复就足够了。mongodump可以连上一个正在服务的mongod节点进行逻辑热备份。其主要原理是遍历所有集合,然后将文档一条条读出来,支持并发dump多个集合,并且支持归档和压缩,可以输出到一个文件(或标准输出)(对原理感兴趣可以参见我之前写的两篇文章Mongodump的arcHive(归档)模式原理解析以及Mongorestore的archive(归档)模式恢复原理解析)。同样,mongorestore则是连上一个正在服务的mongod节点进行逻辑恢复。其主要原理是将备份出来的数据再一条条写回到数据库中。

对性能的影响

mongodump执行过程由于会遍历所有数据,因此会对mongoDB性能有影响,最好在备节点执行(最好是hidden,需检查备节点数据同步是否正常)。

获取一致的数据快照

在mongodump执行过程中由于数据库还有新的修改,直接运行dump出来的结果不是一个一致的快照,需要使用一个『--oplog』的选项来将这个过程中的oplog也一块dump下来(使用mongorestore进行恢复时对应要使用--oplogReplay选项对oplog进行重放)。而由于MongoDB的oplog是一个固定大小的特殊集合,当oplog集合达到配置的大小时旧的oplog会被滚掉以为新的oplog腾出空间。在使用『--oplog』选项进行dump时,mongodump会在dump集合数据前获取当时最新的oplog时间点,并在集合数据dump完毕之后再次检查这个时间点的oplog是否还在,如果dump过程很长,oplog空间又不够,oplog被滚掉就会dump失败。因此在dump前最好检查一下oplog的配置大小以及目前oplog的增长情况(可结合业务写入量及oplog平均大小进行粗略估计),确保dump不会失败。目前我们阿里云MongoDB服务针对oplog做了弹性扩缩容的优化,能够确保在逻辑备份过程中oplog不被滚掉,一定能够备份成功。

索引的备份和恢复

对于集合数据,mongodump出来的结果是一个个bson文件。而对于集合的索引,则是描述在一个metadata的JSON文件里,里面还包含创建集合时所使用的选项。在使用mongorestore进行恢复时,会在集合数据恢复完毕之后进行对应的索引创建。

2、全量物理备份/恢复

对于数据量很大的场景,如果使用mongodump/mongorestore进行备份和恢复,需要的时间可能会很长。对于备份来说,最主要的问题就是备份所需时间越长,oplog被滚掉的几率就越大,备份失败的几率也就越大。而对于恢复来说,由于恢复过程还涉及到索引的创建,如果除了数据量大,还有很多索引,所需花费的时间就更长了。遇到像炉石这种数据灾难,恢复时间当然是越短越好,毕竟在游戏行业分分钟的流水都很可观。这时候就需要物理备份出场了,物理备份,顾名思义就是通过物理拷贝数据文件实现备份。在恢复时可以直接使用物理备份拷贝出来的数据文件,直接启动mongod。物理备份最大的好处是速度快,恢复时也不需要再建索引。

实施方法

物理备份通过拷贝数据文件来实现,这要求所有被拷贝的数据文件必须是一个一致的数据快照。因此物理备份的实施方法和MongoDB采用的存储引擎有关,并且,根据是否配置MongoDB打开了Journal,在实施的细节上会有一些不同,具体可参考官方文档。不管使用何种存储引擎,在3.2版本之后,都可以用以下方法实现物理备份:

  1. 通过mongoshell执行以下命令以确保所有的写操作都flush到磁盘并禁止新的写入:

db.fsyncLock();
  1. 利用底层文件系统层或逻辑卷的快照功能对MongoDB的数据目录做快照,或直接通过cp、scp、tar等命令拷贝数据目录。

  2. 还是在刚才的mongoshell上(这里需要保证和刚刚是同一个连接),执行以下命令以重新允许新的写入:

db.fsyncUnLock();

由于执行db.fsyncLock()会加数据库的全局写,这时数据库会处于一个不可访问的状态,因此物理备份最好也在备节点上执行(最好是hidden,注意同样需要确保物理备份完成之后节点的oplog能追上主节点)。目前我们阿里云MongoDB团队已经研发出了无需停写服务的物理热备份手段,相信很快就可以让大家用上,尽请期待!

增量备份

MongoDB的增量备份可以通过持续抓取oplog来实现,这个目前没有现成的工具可以利用,需要自己代码实现。抓取oplog主要的难题也和使用mongodump进行全量备份一样,需确保要抓取的oplog不被滚掉。目前我们阿里云MongoDB服务实现了自动增量备份的功能,结合全量备份可以实现任意时间点恢复功能。

3、Sharding的备份/恢复

炉石是不分服的,因此它后面也有可能是使用分布式数据库。对于分布式数据库来说,备份和恢复比单机数据库更加复杂。分布式数据库包含多个节点,并且通常包含不同角色的节点。以MongoDB的Sharding集群为例,它包含一个保存元数据的config server以及若干个保存数据的shard。其中最主要的元数据就是数据在shard之间的分布情况。对于多个节点的备份,其中一个难题是保证所有节点备份的数据是同一个时间点的,常规采用的手段是停止外部写入后进行备份,这在互联网服务中显然不可接受。退而求其次,可以在停止接受同步的备节点上进行备份,这样可以得到一个时间大致接近的备份。另外一个难题是各数据节点之间通常存在数据迁移,而数据迁移就涉及到起码2个以上数据节点的数据修改以及元数据节点的数据修改,如果在备份过程中发生数据迁移,很难保证备份出来的数据和元数据是一个一致的状态。因此通常在备份过程中需要关闭数据迁移。MongoDB官方的文档指导步骤就是采用这个思路,先关闭负责数据迁移的balancer,然后依次在config server和各个shard的备节点上进行备份。关闭数据迁移最大的问题是关闭期间集群无法实现数据均衡,除了会影响集群的访问性能外,还造成资源的浪费,这在数据量较大,所需备份时间较长时可能造成比较大的影响。


您可能感兴趣的文档:

--结束END--

本文标题: MongoDB备份恢复笔记

本文链接: https://www.lsjlt.com/news/44936.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MongoDB备份恢复笔记
    1、全量逻辑备份/恢复 Mongodump/Mongorestore对于数据量比较小的场景,使用官方的mongodump/mongorestore工具进行全量的备份和恢复就足够了。mongodump可以连上...
    99+
    2022-10-18
  • MongoDB-备份恢复
    备份工具 (1)** mongoexport/mongoimport (2)***** mongodump/mongorestore   备份工具区别在那里? 应用场景总结: mongoexport/mongoimport:jso...
    99+
    2017-09-12
    MongoDB-备份恢复 数据库入门 数据库基础教程 数据库 mysql
  • MongoDB备份与恢复
           mongodb和mysql很相似,那么它是否也和mysql一样可以备份数据库和恢复数据库呢?那是当然的,下面将简单介绍mo...
    99+
    2022-10-18
  • mongodb 备份和恢复
    mongodb提供了两个命令用来备份(mongodump)和恢复(mongorestore)数据,数据dump出来的格式是BSON的...
    99+
    2022-10-18
  • mongodb 备份与恢复
    一、整库备份:mongodump -h dbhost -d dbname -o dbdirectory-h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:2...
    99+
    2022-10-18
  • postgresql学习笔记(五)备份与恢复
    postgresql学习笔记(五)备份与恢复1、备份工具:pg_dump和pg_dumpallpg_dump可备份一个指定的databasepg_dumpall可一次性备份所有database的数据及系统全...
    99+
    2022-10-18
  • mysql学习笔记之备份与恢复
    5 .备份恢复 相关关...
    99+
    2022-10-18
  • MySQL学习笔记(27):备份与恢复
    本文更新于2020-05-03,使用MySQL 5.7,操作系统为Deepin 15.4。 目录逻辑备份和恢复物理备份和恢复冷备份和恢复热备份和恢复表数据导入导出 MySQL的备份分为逻辑备份和物理备份,物理备份分为冷备份和热备份...
    99+
    2021-04-04
    MySQL学习笔记(27):备份与恢复
  • 3.6-MongoDB备份和恢复
    *MongoDB备份备份指定库   #在linux下操作,而不是数据库中。mongodump -h ip -d dbname -o dir //-h后面跟服务器ip,-d后面跟database名字...
    99+
    2022-10-18
  • mongodb的备份与恢复
    1.MongoDB 如何备份? >[root@service bin]# mongodump    备份数据       进行备份之后,如果你没指定备份目录会在当前目录自动生成dump备份文件   数据备份成功效果图     ...
    99+
    2018-12-18
    mongodb的备份与恢复
  • MongoDB之备份与恢复
    MongoDB数据备份 在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。 mongodump命令可以通过参数指定导出的数据量级转存的服务器。 语...
    99+
    2022-10-18
  • Mongodb备份mongodump和恢复mongorest
    备份指定的数据库:mongodump -u=u_app -p="password" -h 10.11.55.203 --port 27017 -d db_chunqiu -o /backup/备份所有库:m...
    99+
    2022-10-18
  • MongoDB备份和恢复方案
    Oplog介绍 可用于生产环境的备份与恢复脚本 脚本仓库 备份命令 a) 单DB两种方法 (1)mongodump -h localhost:27017 -d db[不能多个] -o /data_dump -u ...
    99+
    2019-01-12
    MongoDB备份和恢复方案
  • linux 下mongoDB备份与恢复
    在你安装mongodb的bin目录下 ygzj_dev数据库名#mongodb备份./mongodump -h 127.0.0.1:27017 -d ygz...
    99+
    2022-10-18
  • MongoDB 备份恢复命令说明
    一、全库备份恢复#mongodump -d my_mongodb -o my_mongodb_dump#mongorestore -d my_mongodb my_mongodb_dump/*二、JSON ...
    99+
    2022-10-18
  • mongodb怎么恢复备份数据
    要恢复 MongoDB 的备份数据,可以按照以下步骤进行操作:1. 首先,确保你已经创建了一个 MongoDB 的备份。备份可以通过...
    99+
    2023-08-31
    mongodb
  • mongodb 中有哪些备份恢复命令
    这篇文章给大家介绍mongodb 中有哪些备份恢复命令,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。备份: mongodump -uroot -ppassword --por...
    99+
    2022-10-18
  • MongoDB中怎么实现备份与恢复
    今天就跟大家聊聊有关MongoDB中怎么实现备份与恢复,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一 mongoexport/mongoimpor...
    99+
    2022-10-18
  • PHP与MongoDB数据库备份与恢复
    随着大数据时代的到来,数据备份和恢复变得越来越重要。在这个过程中,很多网站都会使用PHP和MongoDB数据库来备份数据。本文将介绍如何使用PHP编写MongoDB数据库备份和恢复脚本。一、MongoDB数据库备份MongoDB数据库备份分...
    99+
    2023-05-15
    PHP MongoDB 备份与恢复
  • 怎么备份与恢复MongoDB数据库
    这期内容当中小编将会给大家带来有关怎么备份与恢复MongoDB数据库,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Mongodump工具在MongoDB中,mongodump工具通常用来做备份使用。它有如...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作