<span>使用mongodump和mongorestore添加一个副本集从库</span>
当前环境:
副本集如下:
10.10.10.11:28000 (主库) 10.10.10.12:28000 (从库) 10.10.10.13:28000 (从库)
当前需求:
现在需要通过mongodump该副本集来给该副本集添加一个从库,新的实例所在机器为:
10.10.10.22:28000
01,备份当前副本集:
# mongodump是不会备份local和config这两个库,其余的库均可以被备份,这里进行全备份。
# 在哪里执行mongodump命令,则没有任何要求,只需要与该副本集在同一个网段即可。比如,这里在
# mongodump --host 10.10.10.13 --port 28000 --username xxx --password yyy --authenticationDatabase admin --oplog --out /home/work/backup
02,将备份拷贝到目标机器10.10.10.22:
# 这一步不是必须的,只要备份文件所在机器能够连接目标机器10.10.10.22即可:
scp -r /home/work/backup work@10.10.10.22:/home/work/tmp/
03,以单实例启动10.10.10.22:28000:
更改mongodb的配置文件:注释掉安全配置与复制配置:
# vi /home/work/mongodb/mongo_28000/etc/mongodb.conf
#replication: # oplogSizeMB: 51200 # replSetName: test #security: # keyFile: /home/work/mongodb/mongo_28000/etc/test.keyfile # authorization: enabled
启动该实例:
# /home/work/mongodb/4.0.17/bin/mongod -f /home/work/mongodb/mongo_28000/etc/mongodb.conf
04,mongorestore恢复数据:
# /home/work/mongodb/4.0.17/bin/mongorestore --host=10.10.10.22 --port=28008 --oplogReplay --dir=/home/work/tmp/backup/
05,创建local库中的固定集合oplog.rs:
# /home/work/mongodb/4.0.17/bin/mongo --host=10.10.10.22 --port=28008 > use local > db.createCollection("oplog.rs",{"capped":true,"size":100000000})
# 其中capped:true表示创建的集合是循环覆盖的,限制大小的;创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。size单位是KB
06,恢复备份中oplog.rs到目标机器10.10.10.22:28000:
# /home/work/mongodb/4.0.17/mongorestore --host=10.10.10.22 --port=28000 --db local --collection oplog.rs /home/work/tmp/backup/oplog.bson
07,恢复主节点replset.election集合的数据到目标机器10.10.10.22:28000:
# mongo --host 10.10.10.11 --port 28000 --username xxx --password yyy --authenticationDatabase admin > use local >db.replset.election.find()
{ "_id" : ObjectId("5dcfb9112670e3e338d03747"), "term" : NumberLong(7), "candidateIndex" : NumberLong(2) }
###########################################################################################################################################
###########################################################################################################################################
# mongo --host 10.10.10.22 --port 28000 > use local >db.replset.election.save({ "_id" : ObjectId("5dcfb9112670e3e338d03747"), "term" : NumberLong(7), "candidateIndex" : NumberLong(2) })
08,关闭目标机器10.10.10.22:28000实例,然后以副本集方式启动:
杀掉mongod进程:
# ps aux|grep mongod # kill xxx
去掉注释后:
# vi /home/work/mongodb/mongo_28000/etc/mongodb.conf replication: oplogSizeMB: 51200 replSetName: test security: keyFile: /home/work/mongodb/mongo_28000/etc/test.keyfile authorization: enabled
启动:
# /home/work/mongodb/4.0.17/bin/mongod -f /home/work/mongodb/mongo_28000/etc/mongodb.conf
09,在主库添加该节点实例10.10.10.22:28000:
# mongo --host 10.10.10.11 --port 28000 --username xxx --password yyy --authenticationDatabase admin > use admin > rs.add("10.10.10.22:28000") > rs.status() > rs.printSlaveReplicationInfo()