mongodb 监控和数据备份恢复
仅作了解即可…..
1. mongodb监控
1.1 mongodb ops manager简介
MongoDB Ops Manager(MMS)是用于监控和备份MongoDB的基础设施服务。MongoDB OPS Manager是一个Web应用程序,它需要1个mongodb数据库,这个数据库是用来支持本身的MongoDB OPS Manager来运行的。因此,如果我们想要MongoDB OPS Manager运行起来,最少也需要安装一个MongoDB数据库。
1.2 ops manager作用
- 简易的自动化数据库部署、扩展、升级和任务管理;
- 通过OPS平台提供的超过100项仪表、图表,可以对mongodb进行多种监控;
- 支持单节点、分片集群的备份和恢复;
1.3 安装 ops manager
-
下载ops manager
https://docs.opsmanager.mongodb.com/current/installation/ https://downloads.mongodb.com/on-prem-mms/tar/mongodb-mms-4.4.21.100.20220217T0528Z-1.x86_64.tar.gz
-
解压
tar -zxvf .....tar.gz
-
编辑配置文件
vim conf-mms.properties #根据自己的mongodb进行配置 vim mms.conf # 改改端口,内存等
-
配置完成,启动ops manager
./bin/mongodb-mmsstart
-
访问OPSManager的首页,进行相应配置
http://ip:port
1.4 配置ops manager
- 登录界面
- 注册账号
- 使用创建的用户登录,进入到配置页面
- 按要求填写相应字段即可
1.5 配置ops manager agent
-
点击界面中 Manage your existing deployment
-
Install agent
根据我们目标数据库的操作系统,我们可以选择相应的Agent来安装。(PS:实际的操作系统版本可能更多,大致上一致即可,只要能装上)
-
根据提示安装即可
1.6 监控现有的sharding cluster服务
- 确保shard集群已启动
- 在安装好的agent界面继续
- 配置监控服务,单机/集群都可以
- 根据提示操作即可
- 查看监控页面
2. mongodb数据备份与恢复
2.1 备份的目的
-
防止硬件故障引起的数据丢失
-
防止人为错误误删数据
- 时间回溯
- 监管要求
2.2 备份机制实现方式
-
全备份
* 文件系统快照 * 复制数据文件 * mongodump
-
解决方案
2.3 mongodump
在MongoDB中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。mongodump命令可以通过参数指定导出的数据库或者集合。
mongodump -h dbhost -d dbname -o dbdirectory
mongodump 命令可选参数列表如下所示:
2.4 mongorestore
mongodb使用 mongorestore 命令来恢复备份的数据。
>mongorestore -h <hostname><:port> -d dbname <path>
--db 或者 -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
--drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都
会被删除,慎用哦!
mongorestore 最后的一个参数,设置备份数据所在位置,例如:/root/bdatas/lg,你不能同时指定 和 --dir 选项,
--dir也可以设置备份目录
2.5 备份和恢复的重要选项
mongodump有一个值得一提的选项是 –oplog,注意这是replica set或者master/slave模式专用,standalone模式运行mongodb并不推荐
mongodump的选项:
-
–oplog选项只对全库导出有效,所以不能指定-d选项
-
–oplog的作用:oplog的幂等性:已存在的数据,重做oplog不会重复;不存在的数据重做oplog就可以进入数据库。
看mongorestore的选项:
-
–oplogReplay:可以重放oplog.bson中的操作内容
-
–oplogLimit:回放的时间节点,即此时间之前的数据恢复,假设你后面有误操作,误操作的不恢复
mongorestore -h localhost:37017 –oplogReplay /root/dump
通过 oplog 查询误操作的最后时间
/root/mongodb/bin/bsondump oplog.rs.bson | grep ““op”:“d”” | head
或者 使用
db.oplog.rs.fifind({“op” : “d”}).sort({“ts”:-1})
举例:
mongorestore -h localhost:37017 –oplogReplay –oplogLimit “1443024507:1” /root/dump/local
2.6 全量+增量备份
例
-
插入两条数据
use lg db.lg_resume.insert({name:"test1",salary:18000.5}) db.lg_resume.insert({name:"test2",salary:15000.5})
-
全量备份
./bin/mongodump --host=192.168.211.136 --port=37017 --out=/root/fullbackup
-
继续插入
…
-
增量备份
./bin/mongodump --host=192.168.211.136 --port=37017 -d local -c oplog.rs - o=/root/oplog_bak
-
删除所有数据
-
先恢复全量数据
./bin/mongorestore --host=192.168.211.136 --port=37017 --dir=/root/fullbackup # 查看数据恢复 db.lg_resume.find()
-
恢复数据到指定的时间点
#改变oplog.rs.bson 为 oplog.bson 删除oplog.rs.metadata.bson mv /root/oplog_bak/local/oplog.rs.bson /root/oplog_bak/local/oplog.bson rm /root/oplog_bak/local/oplog.rs.metadata.json -rf # 找出第一次更新的时间 use local db.oplog.rs.find({"op" : "u"}).sort({"ts":1}) # 恢复到指定的时间点的数据 ./bin/mongorestore --host=192.168.211.136 --port=37017 --oplogReplay -- oplogLimit "1606651336" /root/oplog_bak/local ./bin/mongorestore --host=192.168.211.136 --port=37017 --oplogReplay -- oplogLimit "1606651336:4" /root/oplog_bak/local #查看数据恢复 use lg db.lg_resume.find()
-
恢复所有增量数据
./bin/mongorestore --host=192.168.211.136 --port=37017 --oplogReplay /root/oplog_bak/local # 查看数据恢复 db.lg_resume.find()
2.7 定时备份
-
准备备份目录
# 自已定义,如 mkdir -p /root/backup/mongod_bak/mongod_bak_now /root/backup/mongod_bak/mongod_bak_list
-
编写备份脚本
shell 脚本
#!/bin/sh # dump 命令执行路径,根据mongodb安装路径而定 DUMP=/root/mongodb/bin/mongodump # 临时备份路径 OUT_DIR=/root/backup/mongod_bak/mongod_bak_now # 压缩后的备份存放路径 TAR_DIR=/root/backup/mongod_bak/mongod_bak_list # 当前系统时间 DATE=`date +%Y_%m_%d%H%M%S` # 数据库账号 #DB_USER=user # 数据库密码 #DB_PASS=password # 代表删除7天前的备份,即只保留近 7 天的备份 DAYS=7 # 最终保存的数据库备份文件 TAR_BAK="mongod_bak_$DATE.tar.gz" cd $OUT_DIR rm -rf $OUT_DIR/* mkdir -p $OUT_DIR/$DATE $DUMP -h 127.0.0.1 --port 37017 -o $OUT_DIR/$DATE # 压缩格式为 .tar.gz 格式 tar -zPcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE # 删除 7 天前的备份文件 find $TAR_DIR/ -mtime +$DAYS -delete exit
-
修改脚本权限
chmod +x /root/backup/mongobk.sh
-
添加到crontab
crontab -e #表示每天凌晨2点30执行备份 30 2 * * * /root/backup/mongobk.sh
-
查看crontab状态
service crond status
-
查看定时任务和删除定时任务
crontab -l crontab -r crontab -e