话说MongoDB备份与恢复
Posted 云容灾备份安全治理
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了话说MongoDB备份与恢复相关的知识,希望对你有一定的参考价值。
MongoDB云数据库备份/恢复
备份策略:
从hidden节点备份
每天一次全量备份
持续拉取oplog增量备份
定期巡检备份有效性
恢复时克隆到新实例
全量备份方法
逻辑备份流程 - mongodump
特点:
全量遍历所有数据、
备份、恢复慢
对业务影响较大
无需备份索引、恢复时重建
通用性强
物理备份流程
备份特点
拷贝数据目录所有文件,效率高
备份、恢复快
对业务影响较小
跟数据库版本、配置强关联
逻辑备份 vs 物理备份
逻辑备份 |
物理备份 |
|
备份效率 |
低 数据库接口读取数据 |
高 拷贝物理文件 |
恢复效率 |
低 下载备份集 + 导入数据 + 建立索引 |
高 下载备份集 + 启动进程 |
备份影响 |
大 直接与业务争抢资源 |
小 |
备份集大小 |
比原库小 无需备份索引数据 |
与原库相同 |
兼容性 |
兼容绝大部分版本 可跨存储引擎 |
依赖存储布局 |
mongodb的备份准则
只针对replica或master/slave,满足这些准则MongoDB就可以进行point-in-time恢复操作:
任意两次数据备份的时间间隔(第一次备份开始到第二次备份结束)不能超过oplog时间窗口覆盖范围。
在上次数据备份的基础上,在oplog时间窗口没有滑出上次备份结束的时间点前进行完整的oplog备份。请充分考虑oplog备份需要的时间,权衡服务器空间情况确定oplog备份间隔。
实际应用中的注意事项:
考虑到oplog时间窗口是个变化值,请关注oplog时间窗口的具体时间。
在靠近oplog时间窗口滑动出有效时间之前必须要有足够的时间dump出需要的oplog.rs,请预留足够的时间,不要顶满时间窗口再备份。
当灾难发生时,第一件事情就是要停止数据库的写入操作,以往oplog滑出时间窗口。特别是像上述这样的remove({})操作,瞬间就会插入大量d记录从而导致oplog迅速滑出时间窗口。
分片集群的备份注意事项
1、备份什么?
(1)configserver
(2)每一个shard节点
2、备份需要注意什么?
(1)元数据和真实数据要有对等性(blancer迁移的问题,会造成config和shard备份不一致)
(2)不同部分备份结束时间点不一样,恢复出来的数据就是有问题的。
mongodump备份工具
mongodump的参数与mongoexport的参数基本一致
参数 |
参数说明 |
-h |
指明数据库宿主机的IP |
-u |
指明数据库的用户名 |
-p |
指明数据库的密码 |
-d |
指明数据库的名字 |
-c |
指明collection的名字 |
-o |
指明到要导出的文件名 |
-q |
指明导出数据的过滤条件 |
--authenticationDatabase |
验证数据的名称 |
--gzip |
备份时压缩 |
--oplog |
use oplog for taking a point-in-time snapshot |
mongodump参数实践
全库备份
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -o /home/mongod/backup/full
备份test库
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -o /home/mongod/backup/
备份test库下的vast集合
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast -o /home/mongod/backup/
压缩备份库
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -o /home/mongod/backup/ --gzip
压缩备份单表
mongodump -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast -o /home/mongod/backup/ --gzip
mongorestore恢复实践
mongorestore与mongoimport参数类似
参数 |
参数说明 |
-h |
指明数据库宿主机的IP |
-u |
指明数据库的用户名 |
-p |
指明数据库的密码 |
-d |
指明数据库的名字 |
-c |
指明collection的名字 |
-o |
指明到要导出的文件名 |
-q |
指明导出数据的过滤条件 |
--authenticationDatabase |
验证数据的名称 |
--gzip |
备份时压缩 |
--oplog |
use oplog for taking a point-in-time snapshot |
--drop |
恢复的时候把之前的集合drop掉 |
全库备份中恢复单库(基于之前的全库备份)
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop /home/mongod/backup/full/test/
恢复test库
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test /home/mongod/backup/test/
恢复test库下的vast集合
mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast /home/mongod/backup/test/vast.bson
--drop参数实践恢复
# 恢复单库mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test --drop /home/mongod/backup/test/# 恢复单表mongorestore -h 10.0.0.152:27017 -uroot -proot --authenticationDatabase admin -d test -c vast --drop /home/mongod/backup/test/vast.bson
mongoexport/mongoimport与mongodump/mongorestore的对比
mongoexport/mongoimport导入/导出的是JSON格式,而mongodump/mongorestore导入/导出的是BSON格式。
JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。
在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。
JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。
以上是关于话说MongoDB备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章