mongodb通过ObjectId按照时间筛选备份数据库

要完成上述引言里的需求,我们这里从mongo的ObjectId入手,我们知道ObjectId的前四个字节是时间戳,那么我们可以在mongodump -q 来筛选记录。如果你不了解mongo ObjectId的构造请参看《_id和ObjectId》。

首先我们的使用场景是输入一个时间格式,然后返回该时间的最小ObjectId值,然后只要
在MongoDB shell中运行:

function objectIdWithTimestamp(timestamp) {
   // Convert string date to Date object (otherwise assume timestamp is a date)
   if (typeof(timestamp) == 'string') {
        timestamp = new Date(timestamp);
   }
   // Convert date object to hex seconds since Unix epoch
   var hexSeconds = Math.floor(timestamp/1000).toString(16);
   // Create an ObjectId with that hex timestamp
   var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
   return constructedObjectId
}

然后调用上面定义的函数:

 db.collectionName.find({ _id: { $lt: objectIdWithTimestamp('2015/10/01') } })

注:上面collectionName替换成你需查询的collection名字。

mongodump命令脚本语法如下:

>mongodump -h dbhost -d dbname -o dbdirectory-h:

MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017

-d:
需要备份的数据库实例,例如:test

-o:

备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

mongodump的例子:

$MONGO_HOME/bin/mongodump  --port 37218 -d dbname  -q '{"_id":{$gte:ObjectId("56742d800000000000000000")}}' -o ~/backup

注:上面ObjectId(“56742d800000000000000000”)可再上面mongo shell 调用objectIdWithTimestamp函数获得

MongoDB数据恢复

mongodb使用 mongorerstore 命令来恢复备份的数据。

语法
mongorestore命令脚本语法如下:

>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory-h:

MongoDB所在服务器地址

-d:
需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2

--directoryperdb:
备份数据所在位置,例如:c:\data\dump\test,这里为什么要多加一个test,而不是备份时候的dump,读者自己查看提示吧!

--drop:
恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!

接下来我们执行以下命令:

>mongorestore

时间: 2024-10-04 14:04:58

mongodb通过ObjectId按照时间筛选备份数据库的相关文章

数据库-sql时间筛选的问题。我想按月筛选,除了where [登记日期] between 以外其他方法?

问题描述 sql时间筛选的问题.我想按月筛选,除了where [登记日期] between 以外其他方法? 登记日期是年月日的格式,有没有[登记日期]的month属性判断是1月还是其他月? 解决方案 where datepart(year字段) = 2016 and datepart(month字段) = 1 解决方案二: 可以查看我的博客

MongoDB的ObjectId

前段时间有个朋友问我,分布式主键生成策略在我们这边是怎么实现的,当时我给的答案是sequence,当然这在不高并发的情况下是没有任何问题,实际上,我们的主键生成是可控的,但如果是在分布式高并发的情况下,那肯定是有问题的. 突然想起mongodb的objectid,记得以前看过文档,objectid是一种轻量型的,不同的机器都能用全局唯一的同种方法轻量的生成它,而不是采用传统的自增的主键策略,因为在多台服务器上同步自动增加主键既费力又费时,不得不佩服,mongodb从开始设计就被定义为分布式数据库

使用SQL-DMO备份数据库并进行校验

备份|数据|数据库 本文谈论如何用SQL-DMO创建数据库备份和校验的ASP应用. ============================================================ 概述SQL分布式管理对象(SQL Distributed Management objects, SQL-DMO)为开发者提供了使用程序和脚本语言执行普通任务的方法,从而扩展了SQL Server功能.本文谈论如何用SQL-DMO创建数据库备份和校验的ASP应用. 前提你需要有SQL Serv

自动备份数据库并发送邮件报告数据库

  最近在一个做企业的一个内部系统,数据库采用的是SQL2000,为了保证数据的安全性,需要每天下班之后做数据备份,并且通过邮件的方式通知管理员备份情况.备份数据库很简单,用SQL代理建立一个作业,每天定时备份数据库即可,通过SQL2000来发邮件的话,在网上找了些资料,发现有多种方式可以采用. 一.通过SQL Mail SQL Mail 提供了一种从 Microsoft SQL Server 发送和阅读电子邮件的简单方法.原理是通过调用服务器上面的 MAPI 子系统来进行邮件发送,所以服务器上

SqlServer 2008 R2定时备份数据库,并且发送邮件通知

原文:SqlServer 2008 R2定时备份数据库,并且发送邮件通知 先配置数据库的邮件设置,这样才可以发送邮件. 2. 3. 4. 5. 6. 7. 8. 9. 10. 总的预览图,如图   执行这一段(先发送备份邮件,然后进行数据备份,将昨天的发送数据插入到另一张表中,这样表中的数据也很小,查询也很快,充分利用数据库的表空间,进行拆表是一件提高查询和插入速度很快的一种方案) /******发送邮件通知******/ USE OpenMas GO DECLARE @mailContent

mydumper备份数据库详解(已详细说明)

  mydumper是针对mysql数据库备份的一个轻量级第三方的开源工具,备份方式为逻辑备份.它支持多线程,备份速度远高于原生态的mysqldump以及众多优异特性.因此该工具是DBA们的不二选择.本文主要描述该工具的使用方法并给出示例.     有关mydumper安装参考:mydumper安装及安装故障汇总 1.mydumper的特点a.多线程逻辑备份,生产的多个备份文件b.与mysqldump相同,备份时对 MyISAM 表施加FTWRL (FLUSH TABLES WITH READ

SQL Server 2008、SQL Server 2008R2 自动备份数据库

让SQL Server 2008自动备份数据库,需要建立一个SQL Server作业,并启动SQL Server代理,使该作业定期运行. 具体来说,可以按以下步骤进行: 一.打开SQL Server Management Studio,在对象资源管理器中,确认SQL Server代理已启动,若没有,右击SQL Server代理节点,点击"启动". 二.展开SQL Server 代理节点,在其下的作业文件夹上右击,选择"新建作业". 三.在弹出的"新建作业&

MSsql每天自动备份数据库并每天自动清除log的脚本_MsSql

1.每日自动备份 打开企业管理器,进入"管理"-"数据库维护计划",在右侧窗口点击右键,选择"新建维护计划",启动"数据库维护计划向导";点击"下一步"选择需要维护的数据库,维护特性数据库时,选择最后一个单选框并勾选需要维护的数据库名称;"下一步"选择更新数据优化信息."下一步"检查数据库完整性."下一步"指定数据库备份计划."下一步&q

centos下Oracle自动备份数据库步骤

**环境说明** Oracle数据库服务器 操作系统:CentOS IP:192.168.150.214 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 用户:ts 密码:ts **详细的操作步骤如下** 1.root用户登录服务器 {{{ mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的