- A+
配景及原理
数据库的备份是劫难规复的末了一道屏蔽,不管什么类型的数据库都必要设置数据库备份,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 导出导入备份规复数据详解及实例