Mongo--03 mongo副本集、备份与恢复
一、mongo副本集配置
1.创建节点目录和数据目录
#先进到普通用户
su - mongo
#关机
[mongo@db01 ~]$ mongod -f /opt/mongo_27017/conf/mongodb.conf --shutdown
killing process with pid: 17656
[mongo@db01 ~]$ mkdir -p /opt/mongo_2801{7,8,9}/{conf,log,pid}
[mongo@db01 ~]$ mkdir -p /data/mongo_2801{7,8,9}
2.创建配置文件
cat >/opt/mongo_28017/conf/mongo_28017.conf <<EOF
systemLog:
destination: file
logAppend: true
path: /opt/mongo_28017/log/mongodb.log
storage:
journal:
enabled: true
dbPath: /data/mongo_28017
directoryPerDB: true
wiredTiger:
engineConfig:
cacheSizeGB: 0.5
directoryForIndexes: true
collectionConfig:
blockCompressor: zlib
indexConfig:
prefixCompression: true
processManagement:
fork: true
pidFilePath: /opt/mongo_28017/pid/mongod.pid
net:
port: 28017
bindIp: 127.0.0.1,10.0.0.51
replication:
oplogSizeMB: 1024
replSetName: dba
EOF
3.复制配置文件到其他节点
[mongo@db01 ~]$ cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28018/conf/mongo_28018.conf
[mongo@db01 ~]$ cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28019/conf/mongo_28019.conf
4.替换端口号
[mongo@db01 ~]$ sed -i 's#28017#28018#g' /opt/mongo_28018/conf/mongo_28018.conf
[mongo@db01 ~]$ sed -i 's#28017#28019#g' /opt/mongo_28019/conf/mongo_28019.conf
5.启动所有节点
mongod -f /opt/mongo_28017/conf/mongo_28017.conf
mongod -f /opt/mongo_28018/conf/mongo_28018.conf
mongod -f /opt/mongo_28019/conf/mongo_28019.conf
6.初始化集群
config = {
_id : "dba",
members : [
{_id : 0, host : "db01:28017"},
{_id : 1, host : "db01:28018"},
{_id : 2, host : "db01:28019"},
]}
rs.initiate(config)
登录db01 :28017 ,执行命令,再开两个窗口,登录db01:28018,db0:28019
(可以发送到所有会话,看下变化)
[mongo@db01 ~]$ mongo db01:28017
> config = {
... ... _id : "dba58",
... ... members : [
... ... {_id : 0, host : " db01:28017"},
... ... {_id : 1, host : " db01:28018"},
... ... {_id : 2, host : " db01:28019"},
... ... ] }
> rs.initiate(config)
{
"ok" : 0,
"errmsg" : "Attempting to initiate a replica set with name dba58, but command line reports dba; rejecting",
"code" : 93,
"codeName" : "InvalidReplicaSetConfig"
}
7.插入数据
db.inventory.insertMany( [
{ "item": "journal", "qty": 25, "size": { "h": 14, "w": 21, "uom": "cm" }, "status": "A" },
{ "item": "notebook", "qty": 50, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "A" },
{ "item": "paper", "qty": 100, "size": { "h": 8.5, "w": 11, "uom": "in" }, "status": "D" },
{ "item": "planner", "qty": 75, "size": { "h": 22.85, "w": 30, "uom": "cm" }, "status": "D" },
{ "item": "postcard", "qty": 45, "size": { "h": 10, "w": 15.25, "uom": "cm" }, "status": "A" }
]);
8.副本节点登录查看数据
rs.slaveOk()
use test
db.inventory.find()
副本节点无法查看,设置之后可以
#查看库,报错
dba:SECONDARY> show dbs
2019-12-20T09:19:39.357+0800 E QUERY [thread1] Error: listDatabases failed:{
"operationTime" : Timestamp(1576804775, 1),
"ok" : 0,
"errmsg" : "not master and slaveOk=false",
"code" : 13435,
"codeName" : "NotMasterNoSlaveOk",
"$clusterTime" : {
"clusterTime" : Timestamp(1576804775, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:67:1
shellHelper.show@src/mongo/shell/utils.js:860:19
shellHelper@src/mongo/shell/utils.js:750:15
@(shellhelp2):1:1
#设置
dba:SECONDARY> rs.slaveOk()
#再次查看
dba:SECONDARY> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
test 0.000GB
9.设置副本可读
方法1:临时生效
rs.slaveOk()
方法2:写入启动文件,永久生效
echo "rs.slaveOk()" > ~/.mongorc.js
二、查看副本集状态
查看副本集状态
rs.slaveOk() #让副本可以读
rs.status() #查看副本集详细状态
rs.isMaster() #查看当前的主节点是谁
rs.printReplicationInfo() #oplog记录信息
rs.printSlaveReplicationInfo() #查看复制延迟信息
rs.config() #打印当前副本集的配置信息
三、副本集权重调整
模拟故障转移
mongod -f /opt/mongo_28017/conf/mongo_28017.conf --shutdown
mongod -f /opt/mongo_28017/conf/mongo_28017.conf
或者进到admin,db.shutdownServ er()关闭,但这个有限制,必须以本地的localhost登陆点的主机端口生效
dba:PRIMARY> use admin
switched to db admin
dba:PRIMARY> db.shutdownServer()
1.查看当前副本集配置
rs.conf()
2.设置权重
config=rs.conf()
config.members[0].priority=100
rs.reconfig(config)
3.主节点主动降级
rs.stepDown()
4.恢复成默认的权重
config=rs.conf()
config.members[0].priority=1
rs.reconfig(config)
四、创建节点
1.创建新节点并启动
mkdir -p /opt/mongo_28010/{conf,log,pid}
mkdir -p /data/mongo_28010
cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28010/conf/mongo_28010.conf
sed -i 's#28017#28011#g' /opt/mongo_28010/conf/mongo_28010.conf
mongod -f /opt/mongo_28011/conf/mongo_28010.conf
mongo db01:28010
2.将节点加入集群
rs.add("db01:28010")
移除
rs.remove("db01:28010")
五、仲裁节点
1.创建新节点并启动
mkdir -p /opt/mongo_28011/{conf,log,pid}
mkdir -p /data/mongo_28011
cp /opt/mongo_28017/conf/mongo_28017.conf /opt/mongo_28011/conf/mongo_28011.conf
sed -i 's#28017#28011#g' /opt/mongo_28011/conf/mongo_28011.conf
mongod -f /opt/mongo_28011/conf/mongo_28011.conf
mongo db01:28011
2.将仲裁节点加入集群
rs.addArb("db01:28011")
六、mongo备份与恢复
1.工具介绍
(1)mongoexport/mongoimport
(2)mongodump/mongorestore
2.应用场景
1.异构平台迁移 mysql <---> mongodb
2.同平台,跨大版本:mongodb 2 ----> mongodb 3
mongoexport/mongoimport:json csv
日常备份恢复时使用.
mongodump/mongorestore
3.导出工具mongoexport
单表备份
mongoexport --port 27017 -d test -c inventory -o /data/inventory.json
单表备份至csv格式
mongoexport --port 27017 -d test -c user_info --type=csv -f name,age,ad -o /data/user_info.csv
4.恢复
mongoimport --port 27017 -d test -c inventory /data/inventory.json
mongoimport --port 27017 -d test -c user_info --type=csv --headerline --file /data/user_info.csv
5.mysql数据迁移到mongo
select * from world.city into outfile '/tmp/city.csv' fields terminated by ',';
编辑csv文件,添加列名
ID,Name,CountryCode,District,Population
mongoimport --port 27017 -d world -c city --type=csv --headerline --file /data/city.csv
mongoexport --port 27017 -d world -c city -o /data/city.json
6.导出与恢复
mongodump --port 27017 -o /data/backup
mongorestore --port 27017 -d world /data/backup/world/ --drop
mongorestore --port 27017 /data/backup/ --drop
七、准备测试数据
use backup
db.backup.insertMany( [
{ "id": 1},
{ "id": 2},
{ "id": 3},
]);
全备环境
rm -rf /data/backup/*
mongodump --port 28017 --oplog -o /data/backup
增加新数据
mongo db01:28017
use backup
db.backup.insertMany( [
{ "id": 4},
{ "id": 5},
{ "id": 6},
]);
模拟删除集合
mongo db01:28017
use backup
db.backup.drop()
备份oplog
mongodump --port 28017 -d local -c oplog.rs -o /data/backup
查找误操作时间点
use local
db.oplog.rs.find({ns:"backup.$cmd"}).pretty();
找到时间点信息
"ts" : Timestamp(1575023546, 1),
恢复数据
cd /data/backup/local/
cp oplog.rs.bson ../oplog.bson
rm -rf /data/backup/local/
mongorestore --port 28017 --oplogReplay --oplogLimit "1575023546:1" --drop /data/backup/
Mongo--03 mongo副本集、备份与恢复的更多相关文章
- 【Mongo】安装并配置副本集
最近的一个小项目需要用到mongo,所以开始学习下mongo.本打算开三台虚机严格按照生产来配置,然后发现有点带不动,所以决定在一台上通过三个端口来模拟. 1.获取安装包 curl -O http:/ ...
- mongodb中的副本集搭建实践
准备运行1个主节点,2个从节点,从节点中其中是一个是仲裁节点(Arb). --oplogSize --oplogSize --oplogSize 其中application是副本集的名称,节点必须相同 ...
- Mongodb 副本集+分片
mongodb的分片功能是建立在副本集之上的,所以首先我们尝试着配置副本集. docker启动3个已经安装好mongo的镜像 # docker run -idt --name mongodb_01 m ...
- spring配置mongodb连接副本集多个节点
mongodb版本3.4.x 1.配置副本集 先配置副本集,可参考我之前写的文章:http://blog.csdn.net/fuck487/article/details/78287362 注意:必须 ...
- MongoDB4.2 副本集扫盲说明
说明: 在扫盲MongoDB相关的一些知识的时候,顺手做下笔记.本文将说明副本集相关的内容.在比较早之前已经对这些有过说明,可以看MongoDB 副本集的原理.搭建.应用.MongoDB中的副本集是一 ...
- 我们的一个已投产项目的高可用数据库实战 - mongo 副本集的搭建具体过程
我们的 mongo 副本集有三台 mongo 服务器:一台主库两台从库. 主库进行写操作,两台从库进行读操作(至于某次读操作到底路由给了哪台,仲裁决定).实现了读写分离.这还不止,假设主库宕掉,还能实 ...
- MongoDB学习笔记~Mongo集群和副本集
回到目录 一些概念 对于Mongo在数据容灾上,推荐的模式是使用副本集模式,它有一个对外的主服务器Primary,还有N个副本服务器Secondary(N>=1,当N=1时,需要有一台仲裁服务器 ...
- mongo副本集搭建及服务器复用方案
比较常见的mongodb副本集搭建是有:常规节点.数据副本.仲裁节点组成,也就是需要三台服务器组建.常规节点即数据的主存储节点,数据副本是主存储节点的从属节点,它定期去主节点获取更新日志来更新自己.仲 ...
- mongo(五)副本集
mongo(五)副本集 配置文件 1-3为三个存储节点,其实一个为Primary,两个secondary作为备份,4为仲裁节点 # mongod.conf #where to log logpath= ...
随机推荐
- StringBuffer的s1.capacity()是多少?
定义有StringBuffer s1=new StringBuffer(10);s1.append(“1234”)则s1.length()和s1.capacity()分别是多少? StringBuff ...
- 程序员心髓:移动应用API设计10大技巧
移动App与基于Web/云服务发生对话是很常见的事情,最简单的可能仅仅只是检索数据,但也可能包含发送数据.用户授权和管理.而这也就验证了为移动应用建立API的重要性,为此,我们特总结了10大移动API ...
- mysqli使用localhost问题
<?php $mysqli = new mysqli('localhost', 'root', '123456', 'mysql'); if ($mysqli->connect_error ...
- Java 使用反射给属性赋值
package com.nf147.manage.spring; import java.lang.reflect.Field; public class Cat { private String n ...
- python 正则之字母匹配
\A:匹配字符串的开始 \b:匹配一个单词边界 取出a边界单词的个数 >>> len(re.findall(r"\ba"," ab abc ad ...
- taihong
揭秘!除了台风 我们还能在卫星云图上看到什么? 2019-08-08 09:20:53 来源: 中国天气网 中国天气网讯 说到卫星云图,可能大多数人首先能想到的就是台风.其实,拥有太空视角的卫星能 ...
- 无人驾驶车辆路径跟踪的增量式PID控制
路径跟踪是无人车研究方向的一项关键技术.路径跟踪控制算法是指能够使无人车按照预设路径,安全稳定行驶的控制方法. 建立无人车路径跟踪模型 预设无人车在A.B两点间,当前位置为D点,航向为hF 可以得到B ...
- url的匹配问题
1.例如我当前访问的路径是 127.0.0.1:8000/app01/customer/ 此时我需要在这个界面跳转另外一个界面127.0.0.1:8000/app02/books/,于是我定义一个a标 ...
- 异步 map 和模块打包
概述 本文是我在查资料的时候学到的一些东西,记录下来,供以后开发时参考,相信对其他人也有用. 参考资料: 异步函数 - 提高 Promise 的易用性 深入 CommonJs 与 ES6 Module ...
- spring boot加载自定义配置
1.通过@Value 配置文件中 wechat: ssh: host: 192.0.1.1 port: 22 加载类 @Component @Data public class SftpConfig ...