Mongodb 笔记 —- Server Administration —- Backup, Restore

Mongodb 笔记 —- Server Administration —- Backup, Restore

7 6 月, 2019 阅读 742 字数 2290 评论 0 喜欢 0

mongodb中备份,有三种实现方式:

1.Filesystem Snapshot

2.直接复制data文件

3.mongodump

在进行备份之前,为了保证备份时没有新的数据写入。需要关闭balancer和加上instance级的写入锁(如果没有开启journal)。先备份config server,再备份shard set

首先,我们了解一下什么是fsyncLock()。再来细看3种backup方法。

db.fsyncLock()

db.adminCommand( { fsync: 1, lock: true } )

flush pending writes到硬盘,锁住整个mongod instance不再接受任何逻辑数据的写操作直到重启或者使用 ?db.fsyncUnlock()

fsynclock, fsynunclock都会对lockcount进行操作。 运行一次 fsynclock, 对 lockCount +1 。 运行一次 fsynUnclock, 对 lockCount – 1 。只有lockcount =0时。才是真正解锁。

Filesystem Snapshot

利用操作系统文件系统提供的snapshot功能对monogodb数据文件存放的 volume 创建snapshot的方式进行备份。

建立好的snapshot需要存储到其他硬盘上来保证安全。

恢复snapshot时,会产生一个mongod.lock 文件。如果不删除就启动mongod,会被当做上次关闭mongod非正常关闭。

优点:快速方便。可以备份 “粗略的”point-in-time数据

缺点:snapshot典型缺点,备份实际还是依靠原本数据文件完成的。同时不能针对某个数据库进行备份。

复制data file

简单明了,直接复制存储数据的文件到其他磁盘的方式来备份数据。

优点:拥有完整的数据备份

缺点:备份时间长短取决于数据大小。恢复时往往也是文件替换。

使用mongodump

输出文件以 .bson 文件格式存储。可以使用bsondump来validate。

优点:对于备份特定数据库,collection(或者其中一部分)很方便。不需要fssynclock。可以备份point-in-time数据

缺点: mongodump不会被备份Local 数据库 。不被备份index。 占用大量内存,使正常业务占用的内存被清空影响性能。

  • –db //需要备份的数据库
  • –collection //需要备份collection.不填为备份数据库
  • –query //备份使用的查询query
  • –queryFile //或者使用query file 方式指定文件路径
  • –readPreference // 默认从primary 【shard】读。其他情况读nearest
  • –forceTableScan //与–query冲突,强制不是用index
  • –gzip //压缩。。。
  • –out //输出文件的路径
  • –archive //使用stdout方式输出数据
  • –dumpDbUsersAndRoles //导出user ,role信息
  • –excludeCollection //不导出某个collection
  • –excludeCollectionsWithPrefix //导出某个前缀开头的collection, 这个参数可以使用多次,指定多个前缀
  • –numParallelCollections //同时可以导出多少个collection,默认4个
  • –oplog //创建一个 oplog.bson文件。保存备份期间mongod发生的数据变化(oplog entires)。这个方式不是dump oplog collection实现的。同时这个参数只能用于备份整个节点,不能指定对db,collection

mongorestore

恢复mongodump导出的备份文件,并重建索引。但只执行插入不进行更新操作,如有重复_id document不会进行修改document。

不会恢复system.profile。

  • –db //指定导入的db
  • –collection //指定导入的collection
  • –nsExclud //不导入符合 ns pattern的name space
  • –nsInclude //仅导入符合 ns pattern的name space
  • –nsFrom //导出符合 符合 ns pattern的name space 到 nsto
  • –nsTo //从nsFrom ns pattern的name space 以nsTO 的pattern导入
  • –drop //如果有存在对象,则删除
  • –dryRun //不真正导入数据,进获取summary 信息
  • –oplogReplay //导入之后,使用oplog.bson恢复到point-in-time
  • --oplogLimit?<timestamp> //replay时候的 point-in-time选择
  • –oplogFile //oplog 的路径
  • –noIndexRestore //不恢复索引
  • –restoreDbUsersAndRoles //恢复user role设定
  • –writeConcern //默认是majority
  • –maintainInsertionOrder //默认false,按导入文件里的数据顺序导入。
  • –numParallelCollections //同时导入多少个collection
  • –numInsertionWorkersPerCollection //导入一个collection 使用多少个worker
  • –stopOnError //遇到错误停止
  • –gzip // 压缩文件作为输入
  • –archive // 接收stdin 为输入

发表回复

蜀ICP备15005542号