MongoDB实现备份压缩的方法教程

  • A+
所属分类:MongoDB

配景及原理                                        

数据库的备份是劫难规复的末了一道屏蔽,不管什么类型的数据库都必要设置数据库备份,MongoDB也不破例。MongoDB 3.0 后 ,数据库可以采纳Wiredtiger存储引擎后(3.2 版本默认),在此情况下经由过程mongodump 备份后,发生的备份文件要弘远于数据存储文件的年夜小。此外,一样平常MongoDB存储的数据量比拟年夜,备份文件也比拟年夜,占用了许多磁盘空间。以是,研讨若何实现MongoDB备份紧缩很有需要。

上图是执行敕令 db.stats() 查看某数据库的信息。

备份文件的年夜小一样平常为dataSize的年夜小,以是我们愿望紧缩备份,可以到达storageSize 或者更小。

一样平常的备份思绪是先备份,后对备份文件进行紧缩。之前,我们采纳的便是这种方式,例如主要紧缩敕令如下

tar -cf - ${targetpath}/${nowtime} | pigz -p 10 > ${targetpath}/${nowtime}.tgz

(敕令解释: targetpath}/${nowtime 为待紧缩的备份文件;pigz 是Linux紧缩神器,可并行紧缩;-p是指定cpu的核数。)

然则这种方式,天生备份文件的进程中照样容易形成磁盘机能压力和空间压力。下图为我们某台Server 采纳先备份后紧缩方式,形成的磁盘可用空间变化。

真正愿望的是在备份的同时进行紧缩,如许可用空间就比拟安稳了。在MongoDB 3.2 中 引入了一种紧缩式备份【此mongodb版本必需不低于3.2】。可以使用gzip进行紧缩。这是经由过程在mongodump和mongorestore中引入一个新的指令行选项“- -gzip”实现的。

紧缩可用于目次以及归档模子下创立的备份,紧缩还可以削减磁盘空间使用。

测试

测试情况:

测试服务器

测试数据库

端口

文件路径

172.X.X.245

实例全备

17219

/data/mongodb_back

172.X.X.246

QQ_DingDing

17218

/data/mongodb_back/QQ_DingDing

Step 1 紧缩式备份的敕令:

./mongodump --host 172.X.X.245 --port 17219 -u 用户名 -p "大众暗码"大众 --gzip --authenticationDatabase "大众admin"大众 --out /data/mongodb_back

备份后文件的年夜小,97M

这时刻,查看备份文件的格局都酿成了.gz的格局

Step 2 将备份文件copy至长途机械上,进行还原:

以下敕令是将在172.X.X.246,要求是将文件从X.245 copy至当地

scp -r root@172.X.X.245:/data/mongodb_back/QQ_DingDing

step 3 执行还原的敕令

执行的敕令

./mongorestore --host 172.X.X.246 --port 17218 -d QQ_DingDing -u 用户名 -p "大众暗码"大众 --gzip --authenticationDatabase "大众admin"大众 /data/mongodb_back/QQ_DingDing

还原后登录MongoDB,执行show dbs,查看此时 数据年夜小为500M。

弥补阐明 

(1)    假如不采纳紧缩式的备份,备份后的文件会是多年夜呢?备份敕令 :

./mongodump --host 172.X.X.245 --port 17219 -u 用户名 -p "大众暗码"大众 --authenticationDatabase "大众admin"大众 --out /data/mongodb_back2

查看此种办法备份后的文件年夜小--1.5G。

以此QQ_DingDing数据库为例,其紧缩率为(文件紧缩后的年夜小与紧缩前的年夜小之比):97M/1.5G=97/1536=6.3%

(2)   这种紧缩备份的方式的会不会带来一些弊病:例如备份光阴增加?(规复光阴增长?,请自测一下尝尝,嘻嘻 @@@)

以 某归档备份库地点实例为例(storageSize 150G,dataSize 600G )

采纳 先备份后紧缩的方式耗时1小时55分钟

 

采纳紧缩式备份(指定--gzip参数)的方式耗时 2小时33分钟

  

发生的备份文件年夜小根本相等,紧缩式备份方式发生的备份文件略小

以是 紧缩式备份会导致备份光阴增加。

但从空间使用的角度来讲,我们仍旧建议年夜家使用紧缩式备份,其紧缩比异常高(测试案例的紧缩比6.3%)。

附:准时肃清,保存7天的纪录

#!/bin/bash
targetpath='/backup/mongobak'
nowtime=$(date -d '-7 days' "大众+%Y%m%d"大众)
if [ -d "大众${targetpath}/${nowtime}/"大众 ]
then
rm -rf "大众${targetpath}/${nowtime}/"大众
echo "大众=======${targetpath}/${nowtime}/===删除完毕=="大众
fi
echo "大众===$nowtime ==="大众

总结

以上便是这篇文章的全体内容了,愿望本文的内容对年夜家的进修或者事情具有必定的参考进修代价,假如有疑问年夜家可以留言交流,谢谢年夜家对剧本之家的支撑。

您可能感兴致的文章:

mongodb 数据库操作--备份 还原 导出 导入MongoDB整库备份与还原以及单个collection备份、规复办法MongoDB备份、还原、导出、导入、克隆操作示例Windows下主动备份MongoDB的批处置剧本Mongodb实现准时备份与规复的办法教程Windows或Linux体系中备份和规复MongoDB数据的教程Linux下MongoDB数据库实现主动备份详解浅谈MongoDB的备份方式MongoDB使用自带的敕令行对象进行备份和规复的教程MongoDB 导出导入备份规复数据详解及实例

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: