前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用oplog完成MongoDB增量备份

使用oplog完成MongoDB增量备份

作者头像
十毛
发布2019-05-19 16:43:20
4.6K0
发布2019-05-19 16:43:20
举报
文章被收录于专栏:用户1337634的专栏

MongoDB是可以使用复制集的方式完成数据高可用,其实也不会丢数据,但是公司一般还是会要求有一个备份的库。而且在一些网络不能连通的情况(中间需要跨多个网络),就还需要实现手工的增量备份。本文介绍如何使用oplog完成MongoDB的增量备份。

数据准备

代码语言:javascript
复制
tenmao_mongo:PRIMARY> use blog
switched to db blog
tenmao_mongo:PRIMARY> db.article.insert({title:"one"})
WriteResult({ "nInserted" : 1 })
tenmao_mongo:PRIMARY> db.article.insert({title:"two"})
WriteResult({ "nInserted" : 1 })
tenmao_mongo:PRIMARY> db.article.insert({title:"three"})
WriteResult({ "nInserted" : 1 })

全量备份

代码语言:javascript
复制
#全量导出,而且同时导出oplog(这样就保证数据不会丢失)
mongodump --host=localhost --port 27017 --oplog --out=bkm

# 全量导入
mongorestore --host=localhost --port 28017 --oplogReplay bkm

导出的时候一定要使用--oplog,导入的时候也要使用--oplogReplay,否则oplog的信息就会丢失,有的文章中oplog可以后续再导入,但是这里的oplog是无法导入的(可以导入的看后面)

增量备份

  • 获取全量导入时的最新时间戳
代码语言:javascript
复制
[tim@vm backup]$ bsondump bkm/oplog.bson 
{"ts":{"$timestamp":{"t":1557155068,"i":1}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-8619141524121903478"},"v":2,"op":"n","ns":"","wall":{"$date":"2019-05-06T15:04:28.087Z"},"o":{"msg":"periodic noop"}}

得到时间戳Timestamp(1557155068, 1)

  • 再在主库中插入数据
代码语言:javascript
复制
tenmao_mongo:PRIMARY> db.article.insert({title:"four"})
WriteResult({ "nInserted" : 1 })
  • 导出新的oplog(增量)
代码语言:javascript
复制
mongodump --host localhost --port 27017 -d local -c oplog.rs -q '{ts:{$gt: Timestamp(1557155068, 1)}}'
  • 导入oplog(增量)
代码语言:javascript
复制
mongorestore --host localhost --port 28017 --oplogReplay dump/local/oplog.rs.bson
  • 查看备库数据
代码语言:javascript
复制
> db.article.find()
{ "_id" : ObjectId("5cd049460dec5d0273a0e3f9"), "title" : "one" }
{ "_id" : ObjectId("5cd049490dec5d0273a0e3fa"), "title" : "two" }
{ "_id" : ObjectId("5cd0494d0dec5d0273a0e3fb"), "title" : "three" }
{ "_id" : ObjectId("5cd18baedbafdcd937baa41c"), "title" : "four" }
  • 继续 循环:后面就继续不断地根据前面一次的最新的timestamp,然后检索出新的oplog,再应用到备库

常见问题

  • Failed: no oplog file to replay; make sure you run mongodump with --oplog 一般使用因为全量导出数据时生成的oplog,不能单独的使用mongorestore --oplogReplay导入,比如mongorestore --oplogReplay bkm/oplog.bson
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.05.17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据准备
  • 全量备份
  • 增量备份
  • 常见问题
相关产品与服务
云数据库 MongoDB
腾讯云数据库 MongoDB(TencentDB for MongoDB)是腾讯云基于全球广受欢迎的 MongoDB 打造的高性能 NoSQL 数据库,100%完全兼容 MongoDB 协议,支持跨文档事务,提供稳定丰富的监控管理,弹性可扩展、自动容灾,适用于文档型数据库场景,您无需自建灾备体系及控制管理系统。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档