话说MongoDB备份与恢复

Posted 云容灾备份安全治理

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了话说MongoDB备份与恢复相关的知识,希望对你有一定的参考价值。

MongoDB云数据库备份/恢复


话说MongoDB备份与恢复 备份策略:

  1. 从hidden节点备份

  2. 每天一次全量备份

  3. 持续拉取oplog增量备份

  4. 定期巡检备份有效性

  5. 恢复时克隆到新实例

全量备份方法

话说MongoDB备份与恢复

逻辑备份流程 - mongodump



特点:

  1. 全量遍历所有数据、

  2. 备份、恢复慢

  3. 对业务影响较大

  4. 无需备份索引、恢复时重建

  5. 通用性强

物理备份流程


备份特点

  1. 拷贝数据目录所有文件,效率高

  2. 备份、恢复快

  3. 对业务影响较小

  4. 跟数据库版本、配置强关联

逻辑备份 vs 物理备份


逻辑备份

物理备份

备份效率

数据库接口读取数据

拷贝物理文件

恢复效率

下载备份集 +  导入数据 +  建立索引

下载备份集 +  启动进程

备份影响

直接与业务争抢资源

备份集大小

比原库小

无需备份索引数据

与原库相同

兼容性

兼容绝大部分版本

可跨存储引擎

依赖存储布局

mongodb的备份准则

只针对replica或master/slave,满足这些准则MongoDB就可以进行point-in-time恢复操作:

 

  1. 任意两次数据备份的时间间隔(第一次备份开始到第二次备份结束)不能超过oplog时间窗口覆盖范围。

  2. 在上次数据备份的基础上,在oplog时间窗口没有滑出上次备份结束的时间点前进行完整的oplog备份。请充分考虑oplog备份需要的时间,权衡服务器空间情况确定oplog备份间隔。

实际应用中的注意事项:

 

  1. 考虑到oplog时间窗口是个变化值,请关注oplog时间窗口的具体时间。

  2. 在靠近oplog时间窗口滑动出有效时间之前必须要有足够的时间dump出需要的oplog.rs,请预留足够的时间,不要顶满时间窗口再备份。

  3. 当灾难发生时,第一件事情就是要停止数据库的写入操作,以往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的对比

  1. mongoexport/mongoimport导入/导出的是JSON格式,而mongodump/mongorestore导入/导出的是BSON格式。

  2. JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。

  3. 在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。跨版本的mongodump/mongorestore并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)。

  4. JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。



以上是关于话说MongoDB备份与恢复的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb 备份与恢复

python | MongoDB备份恢复与导出导入

mongodb备份与恢复

MongoDB备份与恢复

MongoDB备份与恢复

MongoDB数据备份与恢复