mongoDB的增量备份

目标:实现mongoDB主备中心的数据同步,服务的无缝切换

在这里插入图片描述
本次使用阿里的mongoShake功能实现同步(mongoShake windows和liunx都可以使用,本次为windows),并附上开启自启脚本

阿里开源了mongoshake

git地址:https://github.com/alibaba/MongoShake/releases/tag/release-v2.4.10-20200814

go语言编写,可直接下载编译好的包 ,测试采用的是mongo-shake-v2.4.10.tar.gz

增量同步基本能做到秒级同步

1.解压压缩包

2.修改配置文件collector.conf

(注意已测试,在初次同步时需要修改同步当时为full,否则无法同步,全量同步后,再改同步方式为incr执行)

mongo_urls = mongodb://username:password@10.1.1.1:1001,10.2.2.2:2002,10.3.3.3:3003 #源端连接串信息,逗号分隔不同的mongod

sync_mode = all # 同步模式,all表示全量+增量同步,full表示全量同步,incr表示增量同步。

tunnel.address = mongodb://username:password@10.5.5.5:5005, 10.6.6.6:6006, 10.7.7.7:7007 #目的端连接串信息,逗号分隔不同的mongod

3执行命令collector.windows -conf=collector.conf

全量同步会很快执行完,增量同步则显示一直执行的状态

4.建议增量同步脚本改成开启自启方式

a.创建一个txt文件,写入增量同步的命令 如下,并改扩展名为bat

rem ******MongoDB backup start********
@echo off
d:
rem 此处改为本机mongoshake的地址
cd D:\ck\devlopsTools\mongo-shake-v2.4.10\mongo-shake-v2.4.10
collector.windows -conf=collector.conf
@echo on

b.新建脚本mongosync.vbs,内容如下,换成bat脚本的地址

createobject("wscript.shell").run"C:\Users\Lenovo\Desktop\mongosync.bat",0

4、创建run.vbs的快捷方式,移动到:C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\【开始】菜单\程序\启动
即开机自启

测试: mongoDB 可以支持从集群往单节点同步,单节点同步其他,因为mongoshake是以oplog来同步的,单节点是没有oplog的,因此备中心最好也是个集群,在切换时中心,mongoshake将源mongoDB地址和目的mongoDB地址切换,即可同步

在172.21.15.13,172.21.15.14,172.21.15.16新搭建的副本集作为了备用中心,在本地和172.21.15.15上同时部署了mongoshake进行了测试(mongoshake)可以多部署

以下和mongoshake同步无关,是个人所写windows下mongoDB同步代码,需要可以随便看看
由于mongoDB官方对增量备份不是很支持,网上大多是liunx用的备份工具,故写此文章。
需求:主中心3节点,备中心一节点,主备中心不是同一个集群但是可以ping,现在要求备中心每5分钟增量主中心数据

定时任务+mongoDB工具
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
指定targetMongoTemplate的数据库

@Configuration
@EnableMongoRepositories
@EnableTransactionManagement
@ComponentScan
public class MongoDBConfig extends AbstractMongoConfiguration {
    @Value("${spring.data.target.mongodb.uri}")
    private String targetUri;
    @Bean(name = "targetMongoTemplate")
    public MongoTemplate getSecondaryMongoTemplate() {
        SimpleMongoDbFactory simpleMongoDbFactory = new SimpleMongoDbFactory(new MongoClientURI(targetUri));
        return new MongoTemplate(simpleMongoDbFactory);
    }
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了实现mongodb增量备份,可以利用mongodb的Oplog(操作日志)功能。Oplog是一个特殊的集合,记录了所有对mongodb进行的操作,包括插入、更新和删除等。通过读取Oplog,可以获取到最近一次备份之后的所有操作,从而实现增量备份。 以下是实现mongodb增量备份的步骤: 1. 首先需要开启mongodb的Oplog功能。在启动mongod时,加上--replSet参数,并指定一个副本集名称,例如: ```shell mongod --replSet myrs ``` 2. 初始化副本集。在mongo shell中执行以下命令: ```shell rs.initiate() ``` 3. 创建一个mongodump的全量备份。在命令行中执行以下命令: ```shell mongodump -d mydb -o /var/backups/mongo ``` 4. 编写一个脚本,用于读取Oplog并备份增量数据。以下是一个Python脚本的示例: ```python from pymongo import MongoClient import subprocess # 连接到mongodb client = MongoClient('localhost', 27017) # 获取Oplog集合 oplog = client.local.oplog.rs # 获取上次备份的时间戳 with open('/var/backups/mongo/last_backup_time', 'r') as f: last_backup_time = f.read().strip() # 读取Oplog中的增量数据 query = {'ts': {'$gt': last_backup_time}} cursor = oplog.find(query) # 备份增量数据 for doc in cursor: ns = doc['ns'] ts = doc['ts'] op = doc['op'] o = doc['o'] if op == 'i': # 插入操作 subprocess.call(['mongodump', '-d', ns.split('.')[0], '-c', ns.split('.')[1], '-o', '/var/backups/mongo', '--query', '{"_id": {"$eq": "%s"}}' % o['_id']]) elif op == 'u': # 更新操作 subprocess.call(['mongodump', '-d', ns.split('.')[0], '-c', ns.split('.')[1], '-o', '/var/backups/mongo', '--query', '{"_id": {"$eq": "%s"}}' % o['_id']]) elif op == 'd': # 删除操作 subprocess.call(['mongodump', '-d', ns.split('.')[0], '-c', ns.split('.')[1], '-o', '/var/backups/mongo', '--query', '{"_id": {"$eq": "%s"}}' % o['_id']]) # 更新上次备份的时间戳 with open('/var/backups/mongo/last_backup_time', 'w') as f: f.write(str(oplog.find_one(sort=[('$natural', -1)])['ts'])) ``` 该脚本会读取Oplog中的所有增量数据,并根据操作类型备份相应的数据。备份的数据会保存在之前创建的mongodump全量备份的目录中。 5. 将脚本添加到定时任务中,定期执行增量备份。例如,每天凌晨2点执行一次备份: ```shell 0 2 * * * python /path/to/backup_script.py ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值