首页 > 数据库 >【MongoDB】副本集通过一致性备份增加新节点

【MongoDB】副本集通过一致性备份增加新节点

时间:2023-09-01 15:05:43浏览次数:43  
标签:node02 mongod node01 mongo rs01 MongoDB 备份 db 副本

[mongod@node01 ~]# openssl rand -base64 666 > /var/lib/mongo/keyfile
[mongod@node01 ~]# chown mongod:mongod /var/lib/mongo/keyfile
[mongod@node01 ~]# chmod 600 /var/lib/mongo/keyfile
[mongod@node01 ~]# l /var/lib/mongo/keyfile
-rw------- 1 mongod mongod 902 Sep  1 10:37 /var/lib/mongo/keyfile

[mongod@node01 ~]# scp /var/lib/mongo/keyfile node02:/var/lib/mongo/
[mongod@node01 ~]# scp /var/lib/mongo/keyfile node03:/var/lib/mongo/

[root@node01 ~]# vim /etc/mongod.conf  
security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /var/lib/mongo/keyfile
  
replication:
  replSetName: "rs01"

[root@node01 ~]# systemctl restart mongod
[root@node01 ~]# mongo -u "root" -p "abcd.1234" --authenticationDatabase "admin"
> rs.initiate() 

rs01:PRIMARY> use local
switched to db local
rs01:PRIMARY> db.oplog.rs.stats().maxSize
1038090240

node01执行备份
[mongod@node01 ~]# mongodump -uroot -pabcd.1234 --authenticationDatabase=admin --oplog -o /home/mongod/backup

通过scp复制到node02
[mongod@node01 ~]# scp -r backup/* node02:/home/mongod/backup/
node02以单实例方式启动
[root@node02 ~]# vim /etc/mongod.conf 
#security:
#  authorization: enabled
#  clusterAuthMode: keyFile
#  keyFile: /var/lib/mongo/keyfile
  
#replication:
#  replSetName: "rs01"

node02执行恢复
[mongod@node02 ~]$ mongorestore --oplogReplay --dir /home/mongod/backup

在node02创建oplog.rs集合
[mongod@node02 ~]$ mongo
> use local
switched to db local
> db.createCollection("oplog.rs",{"capped":true,"size":1038090240})
{ "ok" : 1 }

在node02恢复oplog.rs集合
[mongod@node02 ~]$  mongorestore -d local -c oplog.rs  /home/mongod/backup/oplog.bson

在node01查询replset.election集合
rs01:PRIMARY> use local
switched to db local
rs01:PRIMARY> db.replset.election.find()
{ "_id" : ObjectId("64f14f56845ba9f11d295ee1"), "term" : NumberLong(1), "candidateIndex" : NumberLong(0) }

在node02保存node01查询的ection集合的数据
> use local
switched to db local
> db.replset.election.save({ "_id" : ObjectId("64f14f56845ba9f11d295ee1"), "term" : NumberLong(1), "candidateIndex" : NumberLong(0)})

node02以副本集方式启动
[root@node02 ~]# vim /etc/mongod.conf
security:
  authorization: enabled
  clusterAuthMode: keyFile
  keyFile: /var/lib/mongo/keyfile

replication:
  replSetName: "rs01"

[root@node02 ~]# systemctl restart mongod  


在node01执行增加节点操作
rs01:PRIMARY> rs.add("192.168.1.102:27017")
{
        "ok" : 1,
        "$clusterTime" : {
                "clusterTime" : Timestamp(1693542188, 1),
                "signature" : {
                        "hash" : BinData(0,"RGkEIE8wI79S5Uk7f7eUVqGFA1g="),
                        "keyId" : NumberLong("7273693227931140101")
                }
        },
        "operationTime" : Timestamp(1693542188, 1)
}

rs01:PRIMARY> rs.status().members
[
        {
                "_id" : 0,
                "name" : "node01:27017",
                "health" : 1,
                "state" : 1,
                "stateStr" : "PRIMARY",
                "uptime" : 8783,
                "optime" : {
                        "ts" : Timestamp(1693544857, 1),
                        "t" : NumberLong(1)
                },
                "optimeDate" : ISODate("2023-09-01T05:07:37Z"),
                "syncingTo" : "",
                "syncSourceHost" : "",
                "syncSourceId" : -1,
                "infoMessage" : "",
                "electionTime" : Timestamp(1693538676, 2),
                "electionDate" : ISODate("2023-09-01T03:24:36Z"),
                "configVersion" : 2,
                "self" : true,
                "lastHeartbeatMessage" : ""
        },
        {
                "_id" : 1,
                "name" : "192.168.1.102:27017",
                "health" : 1,
                "state" : 2,
                "stateStr" : "SECONDARY",
                "uptime" : 2674,
                "optime" : {
                        "ts" : Timestamp(1693544857, 1),
                        "t" : NumberLong(1)
                },
                "optimeDurable" : {
                        "ts" : Timestamp(1693544857, 1),
                        "t" : NumberLong(1)
                },
                "optimeDate" : ISODate("2023-09-01T05:07:37Z"),
                "optimeDurableDate" : ISODate("2023-09-01T05:07:37Z"),
                "lastHeartbeat" : ISODate("2023-09-01T05:07:42.388Z"),
                "lastHeartbeatRecv" : ISODate("2023-09-01T05:07:43.268Z"),
                "pingMs" : umberLong(1),
                "lastHeartbeatMessage" : "",
                "syncingTo" : "node01:27017",
                "syncSourceHost" : "node01:27017",
                "syncSourceId" : 0,
                "infoMessage" : "",
                "configVersion" : 2
        }
]
验证
rs01:PRIMARY> use tpcc10
switched to db tpcc10
rs01:PRIMARY> db.customer.count()
299702

rs01:SECONDARY> use tpcc10
switched to db tpcc10
rs01:SECONDARY>  db.customer.count()
299702

rs01:SECONDARY> rs.secondaryOk()

标签:node02,mongod,node01,mongo,rs01,MongoDB,备份,db,副本
From: https://blog.51cto.com/dbprofessional/7322804

相关文章

  • 开心档-软件开发入门之MongoDB 高级索引
     作者简介:每天分享MongoDB教程的学习经验、和学习笔记。  座右铭:有自制力,做事有始有终;学习能力强,愿意不断地接触学习新知识。个人主页:iOS开发上架的主页前言本章将会讲解在数组中创建索引,需要对数组中的每个字段依次建立索引。所以在我们为数组tags创建索引时,会为music、cric......
  • mysql备份恢复
    备份某个表:mysqldump-uusername-ppassworddatabase_nametable_name>backup_file.sql备份多个表:mysqldump–uusername-ppassworddatabase_nametable1table2>BackupName.sql备份整个库:mysqldump-uusername-ppassworddatabase_name>backup_file.sql备份多......
  • ontape的备份与恢复
    ontape的备份与恢复ontape简介使用ontape,可以进行GBase8s数据库的备份与恢复。ontape支持L0,L1,L2三级备份与恢复。ontape支持逻辑日志的备份与恢复。ontape本身不支持基于时间点的恢复,但可通过其它工具,将ontape备份的单个表中数据,恢复到指定的时间点(暂不讨论)。基于时间点的数据库备......
  • Golang操作MongoDB
    MongoDB介绍MongoDB是一种非关系型数据库,C++编写的分布式文档型号数据库,内部使用类似于JSON的bson二进制格式。支持单机、主从(废弃)、副本集、Sharding分片等多种高可用架构。具体参考 https://blog.51cto.com/oldlees/7273362驱动驱动:https://www.mongodb.com/docs/drivers/Go驱动......
  • 数据库备份和Shell基础测试及AWK(运维)
    第一题:使用MySQL命令进行备份和恢复的步骤如下:备份test库:使用mysqldump命令备份test库,并将备份写入一个.sql文件中。命令示例:mysqldump-u用户名-p密码test>backup.sql恢复备份:使用mysql命令将备份文件中的数据恢复到test库中。命令示例:mysql-u用户名-p密码test<backu......
  • pg_dump备份加密
    瀚高数据库目录文档用途详细信息文档用途通常目前备份过程中,备份出的数据都为明文,而在备份数据的传输或者使用过程中,都有可能出现备份数据丢失的情况。在这种情况下,需要对备份出的数据进行加密处理。详细信息1.介绍对于备份时输入的口令,使用SM3加密算法,生成类似SM3***格式的16......
  • 【8.0】Docker迁移备份
    【一】镜像的来源:通过dockerpull命令拉取镜像:dockerpull<image_name>该命令将从Docker镜像仓库(如DockerHub)下载指定名称的镜像,并将其存储到本地。通过容器打包成镜像:dockercommit<container_name><image_name>这条命令会将指定的容器打包成一个新的镜像,并根据......
  • Mysql主从备份时遇到的坑
    SHOWVARIABLESLIKE 'server_id' 配置完不同步时,一定要看一下这个值是否一致, 原因是我在my.ini里手工加了一条server-id=2,在手工加的下面,还有一条系统自带的server-id=1,把我的那条冲掉了,所以一直失败!!!......
  • Kafka - 为什么 Kafka 不像 MySQL 那样允许追随者副本对外提供读服务?
    几个原因:1,kafka的分区已经让读是从多个broker读从而负载均衡,不是MySQL的主从,压力都在主上;2,kafka保存的数据和数据库的性质有实质的区别就是数据具有消费的概念,是流数据,kafka是消息队列,所以消费需要位移,而数据库是实体数据不存在这个概念,如果从kafka的follower读,消费端offset控制......
  • windows 下 MongoDB安装与配置
    ​ 一:安装1、官网下载官网下载地址:https://www.mongodb.com/try/download/community 下载社区​编辑​ 下载需要的版本、平台、安装方式即可,2、安装    直接傻瓜式安装即可,直到安装完成    1.选择安装方式:选择默认安装或者自定义安装,我这儿是选的自定......