网站二次开发多少钱,区域名 网站建设公司的销售好做吗,第二波新冠感染高峰,山东平台网站建设平台个人博客
整理mongodb文档:副本集二
个人博客#xff0c;求推荐#xff0c;本片内容较为乱
文章概叙
本文章主要讲在MongoDB的副本集中的一些注意点#xff0c;主要是如何对seconadry进行数据操作#xff0c;以及对更新数据的一些介绍
查看当前节点
上一集讲了关于搭…个人博客
整理mongodb文档:副本集二
个人博客求推荐本片内容较为乱
文章概叙
本文章主要讲在MongoDB的副本集中的一些注意点主要是如何对seconadry进行数据操作以及对更新数据的一些介绍
查看当前节点
上一集讲了关于搭建一个副本集的接着延续上级的操作分别使用
.\mongosh mongodb://localhost:27017.\mongosh mongodb://localhost:27018来链接我们的Primary以及Secondary两个节点当前情况下27018为我们的Primary而27017为Secondary 也可以直接使用rs.isMaster指令查看当前的节点是否为Primary Secondary 设置允许访问
前面提及到了在我们副本集的Secondary中是无法做读写操作的当我们操作的时候会显示出下面的错误而slaveok可以让我们操作MongoDB的Secondary。 而在4.2之后的mongdob中我们需要使用rs.secondaryOk设置Secondary允许访问而4.2之前则是使用slaveOk(),详情请看下方的截图 其中提示提及到了read preference的在关于读写分离介绍的时候再描述一次
接着在Secondary中查询
db.collection27017.find()显示的结果如下图所示我们完成了在Secondary中实现读写的操作
oplog库与Secondary的数据更新
按照我们的经验副本集中Secondary的数据更新是根据local库中的oplog进行更新的部分小伙伴会觉得我们再非副本集下的数据会在设置为副本集的时候同步上去因此下方的代码就验证非副本集下的db会不会被同步。
上一次我们在副本集的加持下让两个Secondary能完美的拷贝到Primary的数据现在解散我们的副本集也就是分别启动两个服务并且使他们没有任何的关联且在其中的一个库中加入一条数据即
此时再打开副本集,看看是否会将那条数据同步过去且需要注意将27018设置为Primary(先启动27018则27018会被设置为副本集的Primary) 很遗憾并不会同步过去而此时我们再往Primary中加入一条新的数据。
此时的Primary中添加的新数据成功被拷贝到Secondary因此我们可以得出结论。当一个副本集更新数据的时候只会更新那些在副本集状态下的sql。 而oplog的信息存放在local下的oplog中。 也可以使用如下的指令敲出来当然需要先到local库中。
use local
db.oplog.rs.find()初始化已有数据的库
上述场景中我们模拟了一个当副本集断开时往其中一个库插入数据是否在副本集选举之后会将数据拷贝的情况很遗憾并没有将数据更新到Secondary中而接下来的场景会测试在搭建副本集前如果Primary库已经有数据的情况下是否会将Primary库中的数据复制到Secondary中去。
首先启动一个端口为27020的MongoDB服务接着创建了一个测试的库并且塞入一条数据。 接着按照之前的操作顺序创建一个副本集并且设置27020为Primary接着进入Primary看下设置副本集时会不会清空MongoDB的服务可以看到数据还在。
接着再登陆Secondary看看是否会将数据复制过去。
可以看到在设置副本集之前的数据在 Primary中是可以保存的。 而当Primary为 空但Secondary又有数据的时候初始化我们的副本集会将Secondary清空还是保留数据呢?这点建议大家自己试试加深理解。
注意点
rs.slaveOk已经是退出舞台的了基本在新版本中不会使用到需要注意下用secondaryOk代替。
一般来说在Secondary实现读写都是违背祖宗的规定万不得已千万不能违背老一辈呀除非老板开口