MongoDB的几种同步方式

在对MongoDB使用的过程中,总结了几种常用的备份、恢复、同步的方式。

1、冷拷贝

这种方式对数据同步的完整性保持的最好,同时也非常方便,但是会影响服务器的使用。

首先关闭源数据库服务,之后使用远程复制命令将数据文件全量拷贝到目标服务器的数据目录下,再启动目标服务器。

如果不关闭源数据库,将会导致部分数据没有写到数据文件中,有很大概率目标服务器无法启动。

 

2、使用mongodump

mongodump是mongodb官方提供的导出工具,使用起来非常简单,一个例子如下

mongodump --host example.net --port 37017 -o /opt/backup/mongodump -d dbname -c collectionname

通过host port参数指定主机,通过o参数指定输出目录,通过d参数指定数据库,通过c参数指定集合

mongodump会自动建立备份目录,并按照数据库,集合划分目录与文件。

 

对应的,官方还提供了mongorestore程序来恢复备份,命令类似于mongodump。使用相同的参数指定主机,数据库,集合等信息,最后一个参数默认为用来恢复的数据文件目录即可。

 

还有几个需要注意的问题:

mognodb不会导出索引数据,所以在恢复后需要重新建立索引。

备份过程中所做的修改可能无法写入到备份文件中,如果需要同步这一些数据,可以使用--oplog参数记录过程中的修改日志,同时需要服务器为副本集或主从模式,否则数据库不会产生oplog。

 

3、增量备份

当数据库为副本集的主节点或主从模式的主节点时,将会生成操作日志,mongodb会使用操作日志对各节点中的数据进行增量同步。

利用这一点,我们也可以对集群之外的节点做同样的增量同步。

oplog数据存储在数据库的local数据库下。

主要字段如下

名称说明
ts操作的时间戳,8字节,mongodb自身的时间戳格式
op操作类型,包括:i插入,u更新,d删除,c数据库命令,n无操作
ns数据库与集合名称
h

操作的唯一id

 

o

操作的内容

o2

更新时的条件

有了这些信息,我们就可以用代码模拟mongodb的同步模式,对操作日志实现重播,从而实现数据的增量同步。

基本代码逻辑如下:

ns = oplog['ns']

index = ns.find('.')
dbname = ns[0:index]
collname = ns[index + 1:]
op = oplog['op']

if op == 'i':  # insert
    dest_mc[dbname][collname].save(oplog['o'])  # if exist,recover it
elif op == 'u':  # update
    dest_mc[dbname][collname].update(oplog['o2'], oplog['o'])
elif op == 'd':  # delete
    dest_mc[dbname][collname].remove(oplog['o'])
elif op == 'n':  # no-op
    logging.info('no-op')
else:
    logging.error('unknown command: %s' % (oplog))

转载于:https://www.cnblogs.com/ruizhang3/p/6539730.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值