mongodb的备份

    转载请附原文链接:http://www.cnblogs.com/wingsless/p/5672057.html

    mongodb现在为止还是没有像XtraBackup这样好用的备份工具,因此一般来说会有两种备份办法:拷贝文件和mongodump。拷贝文件这招在MySQL里经常用,但是必须要停掉写入服务,这种办法一般只会用于要进行机器迁移之类的情景,或者停机维护声明发表以后。那么mongodump算是一种比较推荐的办法。

    《mongodb权威指南》这本书上指出,mongodump这种办法比较慢,它会把数据dump成BSON文件存储起来。备份一般分为全备和增备两种办法,下面分别说明。

   全量备份

     全量备份只需要指定--out(-o)参数,即指定备份存储路径即可。基本上这个没什么可说的,《mongodb权威指南》指出,这个工具不是一个快照备份,如果备份过程中仍然有服务对数据进行了更新操作,比如delete,那么可能备份出来的数据中会有根本不应该存在的数据,恢复的时候也会出现莫名其妙的一条数据。其实这个,并不是一个问题。请看下面的增量备份。

   增量备份

    mongodb自己并没有提供增量备份工具,但是没有问题,mongodb自己有个oplog的东西,这个东西很像MySQL的binlog,记录了所有的操作,而且这个oplog有个特点,叫做幂等性,简单地说就是这个oplog回放多少次效果都是一样的,不会出现数据重复等问题。

    

{
    "ts": Timestamp(1468323972, 37),
    "t": NumberLong(1),
    "h": NumberLong("-9013437047635619317"),
    "v": 2,
    "op": "i",
    "ns": "test1.testone",
    "o": {
        "_id": ObjectId("5784d8849fea750f2cce73c7"),
        "name": 35
    }
}

     上面就是oplog的内容,其中"o"中的内容就是document本身了。可以看到我是在test1数据库的testone集合中插入了该document。

     根据oplog的特点,就可以利用这个东西来做增量备份了。

     首先在全量备份之前,我们需要得到现在的oplog的ts。Timestamp里分别是unix时间戳和序列号。记录下这个ts之后,就可以进行全量备份了。下面还是利用mongodump,只不过这次需要加上两个参数"-d local"和"-c oplog.rs",分别是数据库和collection。另外还有一个很重要的参数,就是"--query",加上一个查询条件即可,下面是一个例子:

     

mongodump -d local -c oplog.rs --query "{"ts":{$gte:Timestamp(1468323972, 18)}}" -o F:\data\test

     1468323972, 18就是我们上面全备之前记录的时间戳和位置。这个命令会将该时间戳之后的所有数据导出来:

     

    增备应该是每天进行的,因此每天都需要将该命令执行一遍,基于第一次的全备即可。

    闲话

      最近玩了一个工具,叫做mongo-oplog-backup的,是一个用ruby写的工具,在github上开源了,支持全备和增备,也是基于mongodump的,只是在恢复的时候,这个工具还能完成增量备份的bson文件和全量备份的bson的合并。但是ruby是我不会的语言,因此最近也在借鉴人家的思想用python写一个自己的工具,希望能成功吧。

      这里附上这个工具的地址,还挺好用的:https://github.com/journeyapps/mongo-oplog-backup

      转载请附原文链接:http://www.cnblogs.com/wingsless/p/5672057.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mongodb备份工具mongodump可以在Mongodb运行时进行备份。它的工作原理是对运行的Mongodb进行查询,然后将查询到的文档写入磁盘。mongodump的参数与mongoexport的参数基本一致,可以完成大多数场景的数据备份。 使用mongodump进行备份时,需要注意一些事项。首先,在使用之前需要仔细阅读相关文档,并进行实际操作测试其功能特性。其次,在备份和恢复过程中,需要确保主机的环境与备份时尽可能保持一致,包括数据库版本、操作系统等等。此外,在进行恢复操作时,需要先停止mongod实例。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MongoDB数据库备份(mongodump)以及恢复(mongorestore)工具实践](https://blog.csdn.net/mybluesky1983/article/details/126598891)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [mongoDB的三种基础备份方法](https://blog.csdn.net/qq_37437983/article/details/125452608)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值