mongo2.4_point_in_time_recovery

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: --配置复制集/opt/mongodb/2.4/bin/mongod --replSet=rs1 --journal --port 27018 --dbpath=/data/mongodb/27018 --logpath=/data/mongodb/log/27018/mongo.
--配置复制集
/opt/mongodb/2.4/bin/mongod --replSet=rs1 --journal --port 27018 --dbpath=/data/mongodb/27018 --logpath=/data/mongodb/log/27018/mongo.log --fork --logappend
/opt/mongodb/2.4/bin/mongod --replSet=rs1 --journal --port 27019 --dbpath=/data/mongodb/27019 --logpath=/data/mongodb/log/27019/mongo.log --fork --logappend
/opt/mongodb/2.4/bin/mongod --replSet=rs1 --journal --port 27020 --dbpath=/data/mongodb/27020 --logpath=/data/mongodb/log/27020/mongo.log --fork --logappend
--初始化复制集,连接一台mongo
use admin
db.runCommand({"replSetInitiate":{
"_id":"rs1",
"members":[{
"_id":1,
"host":"192.168.250.17:27018",
"priority":3
},
{
"_id":2,
"host":"192.168.250.17:27019",
"priority":2
},
{
"_id":3,
"host":"192.168.250.17:27020",
"arbiterOnly":true
}
]}})

--同样可执行如下语句
rs.initiate()


--在主上插入测试数据
 for (var i=0;i<100;i++) {db.userinfo.insert({"id":i,"name":"rudy"+i,password:i+"password"}); }

--在从上执行数据库备份
 mongodump --port 27019 -o /tmp/backup/dump`date +%Y%m%d` --host=192.168.250.17

--继续在主上执行数据
 for (var i=100;i<200;i++) {db.userinfo.insert({"id":i,"name":"rudy"+i,password:i+"password"}); }

 --强制primary和standard节点角色互换
rs.stepDown() 

--在新主上做数据变更
 for (var i=200;i<300;i++) {db.userinfo.insert({"id":i,"name":"rudy"+i,password:i+"password"}); }
 db.userinfo.update({},{$inc:{id:10000},$set:{password:"123456"}},{multi:true});

 --现在需要恢复到第二次插入数据之后时间点

 --查询在指定时间段内的操作的时间点,注意时区
db.oplog.rs.find({
    "ts": {
        $gt: Timestamp(new Date("2016-03-01T03:20:00Z").getTime() / 1000, 1),
        $lt: Timestamp(new Date("2016-03-01T03:31:00Z").getTime() / 1000, 1)
    },
    "op": "i",
    "ns": "test.userinfo",
    "o.id": {$lt:201}
}).sort({
    $natural: -1
}).limit(3)

{ "ts" : Timestamp(1456802915, 1), "h" : NumberLong("2333357293330368223"), "v" : 2, "op" : "i", "ns" : "test.userinfo", "o" : { "_id" : ObjectId("56d50c6306abfb157a0a2f36"), "id" : 200, "name" : "rudy200", "password" : "200password" } }
{ "ts" : Timestamp(1456802551, 100), "h" : NumberLong("1328300502301838340"), "v" : 2, "op" : "i", "ns" : "test.userinfo", "o" : { "_id" : ObjectId("56d50af7a7edfd6396d2f679"), "id" : 199, "name" : "rudy199", "password" : "199password" } }
{ "ts" : Timestamp(1456802551, 99), "h" : NumberLong("-6657180556193796443"), "v" : 2, "op" : "i", "ns" : "test.userinfo", "o" : { "_id" : ObjectId("56d50af7a7edfd6396d2f678"), "id" : 198, "name" : "rudy198", "password" : "198password" } }

--备份指定时间点之前的oplog操作
mongodump -h 192.168.250.17 --port 27018 -d local -c "oplog.rs" -q '{ts:{$lt:Timestamp(1456802915, 1)}}' -o /tmp/backup/oplog

--启动一个实例进行数据恢复
/opt/mongodb/2.4/bin/mongod --journal --port 27021 --dbpath=/data/mongodb/27021 --logpath=/data/mongodb/log/27021/mongo.log --fork --logappend
/opt/mongodb/2.4/bin/mongorestore -dir /tmp/backup/dump`date +%Y%m%d` --host 192.168.250.17 --port 27021
--可以发现已经恢复了前100条数据
[root@localhost local]# mongo --port 27021
MongoDB shell version: 2.4.10
connecting to: 127.0.0.1:27021/test
> db.userinfo.count()
100
> db.userinfo.find()
{ "_id" : ObjectId("56d50a2ca7edfd6396d2f5b2"), "id" : 0, "name" : "rudy0", "password" : "0password" }
{ "_id" : ObjectId("56d50a2ca7edfd6396d2f5b3"), "id" : 1, "name" : "rudy1", "password" : "1password" }
{ "_id" : ObjectId("56d50a2ca7edfd6396d2f5b4"), "id" : 2, "name" : "rudy2", "password" : "2password" }
{ "_id" : ObjectId("56d50a2ca7edfd6396d2f5b5"), "id" : 3, "name" : "rudy3", "password" : "3password" }

--把oplog恢复到一个实例中,注意此处为了方便直接恢复到实例27021了,但在生产环境中不建议,其会与实例27021的相混
/opt/mongodb/2.4/bin/mongorestore  --host 192.168.250.17 --port 27021 -dir /tmp/backup/oplog/local/
--实用oplog到恢复数据库27021
mongooplog -h 192.168.250.17 --port 27021  --from 192.168.250.17:27021 --oplogns "local.oplog.rs"
--至此可发现数据恢复已完成
[root@localhost local]# mongo --port 27021
> db.userinfo.count()
200

目录
相关文章
|
3天前
|
存储 人工智能 安全
AI 越智能,数据越危险?
阿里云提供AI全栈安全能力,为客户构建全链路数据保护体系,让企业敢用、能用、放心用
|
6天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
5天前
|
数据采集 人工智能 自然语言处理
3分钟采集134篇AI文章!深度解析如何通过云无影AgentBay实现25倍并发 + LlamaIndex智能推荐
结合阿里云无影 AgentBay 云端并发采集与 LlamaIndex 智能分析,3分钟高效抓取134篇 AI Agent 文章,实现 AI 推荐、智能问答与知识沉淀,打造从数据获取到价值提炼的完整闭环。
400 93
|
6天前
|
SQL 人工智能 自然语言处理
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
随着生成式AI的普及,Geo优化(Generative Engine Optimization)已成为企业获客的新战场。然而,缺乏标准化流程(Geo优化sop)导致优化效果参差不齐。本文将深入探讨Geo专家于磊老师提出的“人性化Geo”优化体系,并展示Geo优化sop标准化如何帮助企业实现获客效率提升46%的惊人效果,为企业在AI时代构建稳定的流量护城河。
399 156
Geo优化SOP标准化:于磊老师的“人性化Geo”体系如何助力企业获客提效46%
|
6天前
|
数据采集 缓存 数据可视化
Android 无侵入式数据采集:从手动埋点到字节码插桩的演进之路
本文深入探讨Android无侵入式埋点技术,通过AOP与字节码插桩(如ASM)实现数据采集自动化,彻底解耦业务代码与埋点逻辑。涵盖页面浏览、点击事件自动追踪及注解驱动的半自动化方案,提升数据质量与研发效率,助力团队迈向高效、稳定的智能化埋点体系。(238字)
288 158
|
14天前
|
机器人 API 调度
基于 DMS Dify+Notebook+Airflow 实现 Agent 的一站式开发
本文提出“DMS Dify + Notebook + Airflow”三位一体架构,解决 Dify 在代码执行与定时调度上的局限。通过 Notebook 扩展 Python 环境,Airflow实现任务调度,构建可扩展、可运维的企业级智能 Agent 系统,提升大模型应用的工程化能力。