mongodump和mongorestore高级企业应用(--oplog)--06

本文介绍了MongoDB的oplog在复制集中的作用,如何利用oplog实现热备份,并通过案例展示了如何配合mongodump进行数据恢复,特别讨论了在数据误删除后的恢复策略。此外,还提及了在分片集群备份中可能遇到的问题和解决思路。
摘要由CSDN通过智能技术生成

1.介绍

注意:这是replica set或者master/slave模式专用

在replica set中oplog是一个定容集合(capped collection),它的默认大小是磁盘空间的5%(可以通过–oplogSizeMB参数修改).
位于local库的db.oplog.rs,有兴趣可以看看里面到底有些什么内容。
其中记录的是整个mongod实例一段时间内数据库的所有变更(插入/更新/删除)操作。
当空间用完时新记录自动覆盖最老的记录。
其覆盖范围被称作oplog时间窗口。需要注意的是,因为oplog是一个定容集合,所以时间窗口能覆盖的范围会因为你单位时间内的更新次数不同而变化。

use local 
db.oplog.rs.find().pretty()
it 下一页
{
	"ts" : Timestamp(1637674044, 2),
	"t" : NumberLong(1),
	"h" : NumberLong("6978982869296884137"),
	"v" : 2,
	"op" : "c",
	"ns" : "config.$cmd",
	"ui" : UUID("f31d7b7f-a2d5-4f65-9e05-a9c43f5d8e7f"),
	"wall" : ISODate("2021-11-23T13:27:24.059Z"),
	"o" : {
		"create" : "system.sessions",
		"idIndex" : {
			"v" : 2,
			"key" : {
				"_id" : 1
			},
			"name" : "_id_",
			"ns" : "config.system.sessions"
		}
	}

我们主要关注的就是op 后边的参数

"op" : "n"
	"o"  :

    "i": insert
    "u": update
    "d": delete
    "c": db cmd

i插入
u更新
d删除
c drop
根据这个来查找 ts:Timestamp
这个就类似于gtid也是唯一的,幂等性

test:PRIMARY> rs.printReplicationInfo()
configured oplog size:   1561.5615234375MB <--集合大小
log length start to end: 423849secs (117.74hrs) <--预计窗口覆盖时间
oplog first event time:  Wed Sep 09 2015 17:39:50 GMT+0800 (CST)
oplog last event time:   Mon Sep 14 2015 15:23:59 GMT+0800 (CST)
now:                     Mon Sep 14 2015 16:37:30 GMT+0800 (CST)

根据的自己的实际情况,这样117小时就会自动的清空,覆盖。所以备份的时间需要自己掌握好

2. oplog 配合mongodump实现热备

全备

mongodump --port 28017 --oplog -o /mongodb/backup

恢复

mongorestore  --port 28017 --oplogReplay /mongodb/backup

2.1 案列

登录到主节点进行操作
模拟数据

mongo --port 28018
use wo
for(var i = 1 ;i < 20; i++) {
    db.ci.insert({a: i});
}

全备

mongodump --port 28018 --oplog -o /mongodb/backup

–oplog功能:在备份同时,将备份过程中产生的日志进行备份

再次模拟数据

use wo
db.ci1.insert({id:1})
db.ci2.insert({id:2})

数据的删除

db.ci.drop()
show tables;

备份现有的oplog.rs表

mongodump --port 28017 -d local -c oplog.rs  -o /mongodb/backup

截取oplog并恢复到drop之前的位置
更合理的方法:登陆到原数据库

use local
db.oplog.rs.find({op:"c"}).pretty();


{
	"ts" : Timestamp(1637992347, 1),
	"t" : NumberLong(3),
	"h" : NumberLong("-132933563836132105"),
	"v" : 2,
	"op" : "c",
	"ns" : "wo.$cmd",
	"ui" : UUID("79c8b5f9-be5f-4b53-b523-c64ac99d589c"),
	"wall" : ISODate("2021-11-27T05:52:27.072Z"),
	"o" : {
		"drop" : "ci"
	}
}

获取到oplog误删除时间点位置:

"ts" : Timestamp(1637992347, 1),

恢复备份+应用oplog

cd /mongodb/backup/local/
ls
oplog.rs.bson  oplog.rs.metadata.json

cp oplog.rs.bson ../oplog.bson 
rm -rf /mongodb/backup/local/

mongorestore --port 28018  --oplogReplay --oplogLimit "1637992347:1"  --drop   /mongodb/backup/

恢复成功

my_repl:PRIMARY> use wo 
switched to db wo
my_repl:PRIMARY> show tables
ci
ci1
ci2
**分片集群的备份思路(了解)

1、你要备份什么?
config server
shard 节点

单独进行备份
2、备份有什么困难和问题
(1)chunk迁移的问题
	人为控制在备份的时候,避开迁移的时间窗口
(2)shard节点之间的数据不在同一时间点。
	选业务量较少的时候
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长安有故里y

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值