Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

Vinllen Chen


但行好事,莫问前程

MongoDump和MongoRestore源码解析

  mongodump和mongorestore都是mongodb官方提供的数据备份和恢复的工具,github地址。其本身实现都比较简单,本文会大概介绍一下原理,其实一开始我是想介绍一下细节的,但是看代码都比较简单,还是算了吧。

MongoDump

  MongoDump用于把数据备份从MongoDB备份数据。MongoDump做的比较简单,按db.collection为粒度进行dump,dump的时候先dump meta信息,主要是索引、版本、用户等信息,然后是dump的表数据。其中meta信息以json形式进行dump,表的数据以gzip或者bson格式进行dump。另外,全量期间的oplog也会被dump(开始dump的时候记录一下最新的oplog时间戳),如果用户指定了--oplog参数,便于后面按时间点进行恢复。
  dump的粒度是按表并发,表内并没有做并发处理。单表只有2个线程,1个线程负责拉取,1个线程负责写入。拉取线程也是直接扫表的操作,没有做snapshot。
  本身dump也没有做断点续传机制。抓取侧也没有做按表切分的优化。
  mongodump本身可以备份admin库,但是只备份库下面system.roles, system.users, system.version几个表,用户的数据如果写入到admin库下面是不会被备份的。

MongoRestore

  MongoRestore实现跟目前MongoShake的做法差不多,有按表并发的粒度,以及表内并发的控制,数据采用golang管道进行流转。如果表内并发度>1,那么回放是多个线程并行的,并且数据写入是有聚合的(采用bulkWriter),所以mongorestore提供了--maintainInsertionOrder参数,多个线程插入是不能保证顺序的。
  数据回放完毕写入index。并且用户可以勾选oplog的恢复,参考mongodump的oplog按时间点备份。
  每个表有个uuid,用户可以勾选保留源端表的uuid。 恢复前目的库如果存在表,用户可以勾选是否先删除再进行恢复。

说明

转载请注明出处:http://vinllen.com/mongodumphe-mongorestoreyuan-ma-jie-xi-2/


About the author

vinllen chen

Beijing, China

格物致知


Discussions

comments powered by Disqus