700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 基于mongodb的数据备份与恢复

基于mongodb的数据备份与恢复

时间:2019-04-09 07:32:50

相关推荐

基于mongodb的数据备份与恢复

在生产环境中,存放数据的服务器仍有可能发生掉电、宕机以及其他无法预测的情况,为了确保数据的安全性,好一部分数据是需要做按时备份,并在灾难发生时,能够及时进行数据的恢复。

本篇的测试项目是借以单机部署3个节点的集群环境,来模拟多机环境的数据备份恢复。

mongodb安装与部署集群(3个节点,1个节点类似)

mongodb ZIP安装,版本4.0.28,win10

创建3个文件夹,分别命名r1,r2,r3

在这3个文件夹中分别新建mongodb.conf,/log/mongodb.log, /data, start.bat

# ==============================================

# r1中的配置

# r1/mongodb.conf

dbpath=D:\workspace\mongodb-4.0.28\r1\data

logpath=D:\workspace\mongodb-4.0.28\r1\log\mongodb.log

logappend=true

journal=true

quiet=true

port=27017

replSet = s1

# r1/start.bat

cd D:\workspace\mongodb-4.0.28\bin

mongod --config D:\workspace\mongodb-4.0.28\r1\mongodb.conf

# ==============================================

# r2中的配置

# r2/mongodb.conf

dbpath=D:\workspace\mongodb-4.0.28\r2\data

logpath=D:\workspace\mongodb-4.0.28\r2\log\mongodb.log

logappend=true

journal=true

quiet=true

port=27018

replSet = s1

# r2/start.bat

cd D:\workspace\mongodb-4.0.28\bin

mongod --config D:\workspace\mongodb-4.0.28\r2\mongodb.conf

# ==============================================

# r3中的配置

# r3/mongodb.conf

dbpath=D:\workspace\mongodb-4.0.28\r3\data

logpath=D:\workspace\mongodb-4.0.28\r3\log\mongodb.log

logappend=true

journal=true

quiet=true

port=27019

replSet = s1

# r3/start.bat

cd D:\workspace\mongodb-4.0.28\bin

mongod --config D:\workspace\mongodb-4.0.28\r3\mongodb.conf

小提示:如果是Mongodb5.0,有些语法不一样,导致许多报错,建议换成Mongodb4.0。

分别运行3个文件夹中的start.bat文件,即开启3个mongo实例。

生成并启动mongo实例,还可以直接执行下边命令:

mongod --port 27017 --dbpath E:/mongos/mongodb1/data --logpath E:/mongos/mongodb1/log/mongodb.log --pidfilepath E:/mongos/mongodb1/mongodb1.pid --replSet s2 --logappend --directoryperdb

开启3个客户端来连接对应的实例

mongo localhost:27017

mongo localhost:27018

mongo localhost:27019

配置集群主,备,仲裁节点,只需要在Primary节点上进行这一步,其他2个节点不需要操作。 需要关闭后台mongoDB服务,开启实例也就开启了服务。

> use admin

> cfg={ _id:"s1", members:[ {_id:0,host:'localhost:27017',priority:2}, {_id:1,host:'localhost:27018',priority:1}, {_id:2,host:'localhost:27019',arbiterOnly:true}] };

> rs.initiate(cfg)

> rs.status()

注:一台mongodb实例时,cfg={id:"s1", members:[ {id:0,host:'localhost:27017',priority:2}] };两台mongodb实例时,cfg={id:"s1", members:[ {id:0,host:'localhost:27017',priority:2}, {_id:1,host:'localhost:27018',arbiterOnly:true}] }。

Primary节点的账号密码设置

1. use admin

2. db.createUser({user: 'root', pwd: 'Gdpt', roles: ['root']})

在 mongodb安装程序中的mongod.cfg配文中,修改

security:

authorization: enabled

或者由命令启动服务时增加--auth

mongod --auth --config E:\workspace\mongodb-4.0.28\r1\mongodb.conf

测试业务场景

一周一次全量备份,每天一次增量备份,本文还未设置定时任务执行,手动执行全部测试成功。

全量备份&还原

起初,针对原始数据进行全量备份,执行脚本all_backup.bat,备份数据做了压缩。

rem ******Mongodb full backup start******

@echo off

set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"

md D:\workspace\mongodb-4.0.28\backup\full\%Ymd%\

"D:\workspace\mongodb-4.0.28\bin\mongodump.exe" --host=127.0.0.1 --port=27017 -u root -p root --gzip --authenticationDatabase=admin -o D:\workspace\mongodb-4.0.28\backup\full\%Ymd%\

@echo on

rem ******Mongodb full backup end******

针对全备数据后期可以随时全量还原,将mongodbBackup_0708044702指定为备份文件夹,执行下边all_recover.bat

rem ******Mongodb full backup start******@echo off"D:\workspace\mongodb-4.0.28\bin\mongorestore.exe" --host=127.0.0.1 --port=27017 -u root -p root --authenticationDatabase=admin --gzip E:\data\allDump\mongodbBackup_0708044702\@echo onrem ******Mongodb full backup end******

增量备份&还原

更改系统时间至第二天,插入数据,继续更改系统时间至第三天,进行增量备份。

删除数据库。测试全量恢复之后,测试增量恢复。

增量备份add_backup.bat

rem ******MongoDB backup start********@echo offecho wscript.echo DateDiff("s", "01/01/1970 00:00:00", Date())>sjc.vbsfor /f %%i in ('cscript sjc.vbs /nologo') do set endDate=%%iset /a "endDate=%endDate%-28800"set /a "startDate=%endDate%-86400"set "Ymd=%date:~0,4%%date:~5,2%%date:~8,2%0%time:~1,1%%time:~3,2%%time:~6,2%"md D:\workspace\mongodb-4.0.28\backup\add\%Ymd%\"D:\workspace\mongodb-4.0.28\bin\mongodump.exe" --host=127.0.0.1 --port=27010 -u root -p root --authenticationDatabase=admin -d local --gzip -c oplog.rs --query "{"ts":{$gte:Timestamp(%startDate%, 1),$lt:Timestamp(%endDate%, 1)}}" -o E:\data\oplogDump\%Ymd%\@echo onrem ******MongoDB backup end********

这是增量备份的脚本,其中可以看到在命令行中加入了查询条件,ts表示时间范围,这里是设置的从当前日期前一天的0点到今天的0点,设置在每天凌晨运行备份前一天从0点开始24小时的数据(这里需要根据环境的不同来更改),ns表示查询的数据的范围,这里是查询了用于测试的test数据库的数据(这两个查询条件可以在oplog.rs这个collection中的document中找到相对应的字段,可以根据不同的需求作添加或更改)。

增量恢复add_recover.bat

比如,插入新数据当时是6月1日,把电脑时间调整到6月2号,然后执行增量备份脚本,在生成的目录E:\data\oplogDump\%Ymd%\中,有oplog.rs.bson文件。

然后删除russia数据库,执行全量还原脚本,然后要执行增量还原脚本。

先找到刚刚增量备份的oplog.rs.bson文件,压缩的情况下需先解压;

把这个文件复制到全量备份生成的文件夹中E:\data\allDump\mongodbBackup_0708044702,并把这个文件改名成oplog.bson;

最后执行增量还原脚本即可。

rem ******Mongodb full backup start******@echo off"D:\workspace\mongodb-4.0.28\bin\mongorestore.exe" --host=127.0.0.1 --port=27010 -u root -p root --oplogReplay --authenticationDatabase=admin D:\workspace\mongodb-4.0.28\backup\full\0531053536@echo onrem ******Mongodb full backup end******

脚本等同于执行下边的指令

mongorestore --host=127.0.0.1 --port=27010 --drop --oplogReplay --oplogFile E:\data\allDump\mongodbBackup_0609043550\oplog.bson

小提示:

mongorestore语法模板

mongorestore --host <host>:<port> -u <user> --authenticationDatabase <adb>--oplogReplay--oplogFile dump/local/oplog.rs.bson--oplogLimit 1646056729:1filedir

查看oplog.rs.bson记录的指令

bsondump E:\data\oplogDump\0613072745\local\oplog.rs.bson

查询oplog.rs集合的操作日志

use localdb.oplog.rs.find({"ns": "test.test"}).sort({"$natural": -1})

备份单个集合

mongodump --host <host>:<port> -d local -c oplog.rs -u <user> --authenticationDatabase <adb> -q '{"ns": "test.survey"}'

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。