MongoDB的数据库如何备份和恢复?

  • 时间:
  • 浏览:0

Mongodump/Mongorestore

全量逻辑备份/恢复

MongoDB数据库怎么才能 才能 备份?恢复MongoDB数据库应怎么才能 才能 操作?最近数据库多灾多难,那此问提也成为开发者关注的重点。2016年12月爆出MongoDB数据库安全问提(见MongoDB黑客赎金事件解读及防范)。2017年1月又被炉石传说数据库故障给刷屏了。作为一一好有几个 多数据库行业从业人员,就看你什么都新闻是全部都是还应该干点那此?恩,很有必要再重新审视一下大伙儿的数据库有如此做好容灾,借此可能性给大伙儿普及一下MongoDB数据库的备份和恢复手段。

Sharding的备份/恢复

恢复时可不都可以选者某一一好有几个 多备份集或某一一好有几个 多时间点复制出一一好有几个 多新的实例,可不都可以在新实例上进行数据校验,等校验没问提后切换到新实例。此外,全量备份的数据还提供下载功能,用户也可不都可以选者下载备份集到本地后恢复到一一好有几个 多临时实例进行数据校验。

阿里云云数据库MongoDB服务提供自动备份/恢复功能,默认每天为数据进行全量备份,可是自动抓取oplog进行增量备份。用户可不都可以在控制台自定义备份策略以及进行恢复。

全量物理备份/恢复

db.fsyncUnLock();

MongoDB备份手段

实施法律办法

性能的影响

增量备份

在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不被滚掉,一定也能备份成功。

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

以上信息可不都可以帮助大伙儿对MongoDB的备份/恢复手段一一好有几个 多要花费 的认识。从省心的下行速率 考虑,还是建议直接使用阿里云云数据库MongoDB服务,大伙儿有自动化的备份/恢复服务,灵活的备份策略,只需点点鼠标就能实现任意时间点恢复、物理热备份、Sharding备份/恢复,从此不再为数据库容灾发愁。

db.fsyncLock();

索引的备份和恢复

MongoDB的增量备份可不都可以通过持续抓取oplog来实现,你什么都目前如此现成的工具可不都可以利用,时要当时人代码实现。抓取oplog主要的问提也和使用mongodump进行全量备份一样,需确保要抓取的oplog不被滚掉。目前大伙儿阿里云MongoDB服务实现了自动增量备份的功能,结合全量备份可不都可以实现任意时间点恢复功能。

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

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

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

阿里云云数据库MongoDB备份服务

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

3.    还是在刚才的mongoshell上(这里时要保证和然后是同一一好有几个 多连接),执行以下命令以重新允许新的写入:

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

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

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

可能性执行db.fsyncLock()会加数据库的全局写锁,这时数据库会存在一一好有几个 多不可访问的情况,可是物理备份最好也在备节点上执行(最好是hidden,注意同样时要确保物理备份完成然后节点的oplog能追上主节点)。目前大伙儿阿里云MongoDB团队可能性研发出了无需停写服务的物理热备份手段,相信变慢就可不都可以让大伙儿用上,尽请期待!

取一致的据快照

针对这两大问提,阿里云云数据库MongoDB团队研发了不时要停内部写,可是无需关数据迁移的Sharding备份手段,也能实现『任意』时间点恢复。