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

时间: 2024-07-31 14:31:26

mongodb的备份的相关文章

MongoDB数据库备份恢复与导入导出

一.mongodump/mongorestore方式 使用场景:数据库导出指定collection,无法手工修改导出文件(二进制)允许条件:数据库原始collection导入操作前可以被删除(处理方式:插入)或者保留(处理方式:删除然后插入)导出数据格式:二进制类型,不可手工修改 1.备份数据库指定collection C:\Users\Administrator>mongodump -d webdb -c users -o e:\webdb_users_dumpconnected to: 12

mongodb 定时备份

通过centos 脚步来执行备份操作,使用crontab实现定时功能,并删除指定天数前的备份 具体操作: 1.创建Mongodb数据库备份目录 mkdir -p /home/backup/mongod_bak/mongod_bak_now mkdir -p /home/backup/mongod_bak/mongod_bak_list 2.新建Mongodb数据库备份脚本 vi /home/crontab/mongod_bak.sh #新建文件,输入以下代码 #!/bin/sh DUMP=/us

mongodb 数据库备份操作

mongodb  数据库备份 mongodump --host mongodb.example.net --port 27017 备份路径选择 mongodump --out /data/backup/ 选择要备份的数据库和集合 mongodump --collection myCollection --db test 创建非本地数据库备份 mongodump --host mongodb1.example.net --port 3017 --username user --password "

MongoDB操作-备份和恢复

mongodb数据备份和恢复主要分为二种:一种是针对库的mongodump和mongorestore,一种是针对库中表的mongoexport和mongoimport. 一. mongodump备份数据库 1. 常用命令格式 mongodump -h IP --port 端口 -u 用户名 -p 密码 -d 数据库 -c 表 -o 文件存放路径 参数说明:-h 指明数据库宿主机的IP--port 指明数据库的端口 -u 指明数据库的用户名-p 指明数据库的密码-d 指明数据库的名字-c 指明co

docker安装mongodb并备份

安装 官方镜像地址: https://hub.docker.com/_/mongo?tab=description 可以查看对应的dockerfile, 通过观察docker-entrypoint.sh可以看出,docker版的mongo移除了默认的/etc/mongo.conf, 修改了db数据存储路径为 /data/db. docker run --name mongod -p 27017:27017 -v /data/opt/mongodb/data/configdb:/data/conf

练习MongoDB 操作 — 备份篇(三)

mongodb3.x 发布于 2017-09-22 约 5 分钟 原文链接:https://segmentfault.com/a/1190000011263553 导入与导入 导入与导出是针对集合,对集合上的文档数据经过"查询条件"后导出: 导出 MongoDB的导出是利用mongoexport命令:同时列举常用的参数: -h:数据库宿主机的IP -u:数据库用户名 -p:数据库密码 -d:数据库名字 -c:集合的名字 -f:导出的列名 -q:导出数据的过滤条件 -o:导出文件的目录及

Mongodb的备份,恢复,导入与导出(cmd命令行实现)

要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下命令均在cmd命令行中输入,导出及备份未指明目录情况下,均保存在当前操作目录下. 数据导出mongoexport 1.常用导出方法:导出数据为json 假设库里有一张area 表,里面有9 条记录,我们要将它导出 >c:\mongo\bin\mongoexport -d iflashbuy_log -c area

mongodb数据库备份恢复

MongoDB数据文件备份与恢复 备份与恢复数据对于管理任何数据存储系统来说都是非常重要的. 1.冷备份与恢复——创建数据文件的副本(前提是要停止MongoDB服务器),也就是直接copy www.2cto.com MongoDB将所有数据都存储在数据目录下,默认是/data/db/(Windows下是C:\data\db\),启动MongoDB时也可以用--dbpath指定我们自己设置的数据存储目录. 备份MongoDB数据:只要简单的创建数据存储目录的副本就可以了,直接copy一份. 恢复M

mongodb增量备份方法

首先应用了别人写的mongobackup的文件包 去这个网址下载:http://pan.baidu.com/s/15YsBs 把mongobackup的文件下载到你的mongodb的bin目录下 输入 chmod a+x mongobackup      //让系统编译它 然后,重启mongodb 简介 mongobackup 是用于复制集的增量备份与恢复工具,恢复时,需要结合全量备份与恢复使用. 增量备份 普通备份 mongobackup  --backup 流模式备份 mongobackup