mongodb数据库主从复制的原理:
在主从结构中,主节点的操作记录称为oplog(operation log)。oplog存储在一个系统数据库local的集合oplog.$main中,这个集合的每个文档都代表主节点上执行的一个操作。
可以通过以下语句查询:
db.oplog.$main.find()
从服务器会定期从主服务器中获取oplog记录,然后在本机上执行!对于存储oplog的集合,MongoDB采用的是固定集合,也就是说随着操作过多,新的操作会覆盖旧的操作!
主从复制的一些设置:
–only 从节点指定复制某个数据库,默认是复制全部数据库
–slavedelay 从节点设置主数据库同步数据的延迟(单位是秒)
–fastsync 从节点以主数据库的节点快照为节点启动从数据库
–autoresync 从节点如果不同步则从新同步数据库(即选择当通过热添加了一台从服务器之后,从服务器选择是否更新主服务器之间的数据)
–oplogSize 主节点设置oplog的大小(主节点操作记录存储到local的oplog中)
1:首先确认一下我们已经有了这个环境了:
mongodb数据库1 localhost:27017
mongodb数据库2 localhost:27018
2:修改配置文件
vi mongodb27018.conf
加入以下几个参数
bind_ip = 127.0.0.1 #从数据库所在服务器
source = 127.0.0.1:27017 #确定主数据库端口
slave = true #确定自己是从服务器
vi mongodb27017.conf
加入以下参数
bind_ip = 127.0.0.1 #主数据库所在服务器
master = true #确定我是主服务器
3:重启两天mongodb数据库
进入数据库
use admin
db.shutdownServer()
关闭后重新启动数据库
4:从节点登陆
mongodb 127.0.0.1:27108
show dbs
返回错误,因为从节点不可读,然后执行下面语句OK
在从节点上执行rs.slaveOk()
或者在主节点上执行db.getMongo().setSlaveOk()
5:开始验证数据
主库添加数据:
mongodb 127.0.0.1:27107
use maxiangqian
db.student.insert({"name":"maxiangqian"})
从库验证数据:
use maxiangqian
db.student.find()
发现数据已经同步了
6:查看同步状态
rs.printReplicationInfo()
官网给的解释:
1:启动master:mongod --master --dbpath /data/masterdb/
2:启动slave:mongod --slave --source <masterhostname><:<port>> --dbpath /data/slavedb/
3:从库添加:
use local
db.sources.find()
db.sources.insert( { host: <127.0.0.1:27107> } );
删除复制的联系:
直接在从库执行:
use local
db.sources.remove({“host”:”127.0.0.1:8888”})