MongoDB备份 - > tar - > gz - > GPG

时间:2017-06-29 15:45:26

标签: linux bash mongodb ubuntu

我有一个MongoDB服务器,我正在使用mongodump命令来创建备份。我运行命令mongodump --out ./mongo-backup然后tar -czf ./mongo-backup.tar.gz ./mongo-backup然后gpg --encrypt ./mongo-backup.tar.gz > ./mongo-backup.tar.gz.gpg并将此文件发送到备份服务器。

我的MongoDB数据库 20GB 使用MongoDB show dbs命令,MongoDB mongodump备份目录只有 3.8GB ,MongoDB gzipped-tarball只有 118MB 且我的gpg文件的大小仅为 119MB

如何将20GB数据库减少到119MB文件?它是容错的吗?

我尝试创建新服务器(生产的克隆),启用防火墙以确保没有人可以连接并运行此备份过程。我创建了新的服务器和导入数据,但存在一些差异:

我从mongo shell use db1; db.db1_collection1.count();use db2; db.db2_collection1.count();运行了相同的命令,结果是:

  • 807843 vs. 807831( db1.collection1源服务器 db1.collection1已恢复服务器
  • 3044401 vs. 3044284( db2.collection1源服务器 db2.collection1已恢复服务器

1 个答案:

答案 0 :(得分:0)

如果您已经验证了已恢复数据中文档/集合的数量和大小,则可以使用此方案,尽管在描述的比率中不典型。

  

我的MongoDB数据库 20GB 与MongoDB show dbs命令

这将显示磁盘上文件的大小,包括删除以前数据时存在的预分配空间。预分配空间可供重用,但有些MongoDB存储引擎比其他存储引擎更有效。

  

MongoDB mongodump备份目录只有 3.8GB

除非您指定mongodump选项,否则--gzip工具(在v3.2.11中,您提及使用)会导出数据的未压缩副本。此总数应表示您的实际数据大小,但不包括用于索引的存储。索引定义由mongodump导出,并且在通过mongorestore重新加载转储时将重建索引。

使用WiredTiger时,未压缩的mongodump输出通常大于磁盘上的文件大小,默认情况下会压缩这些文件。对于将来的备份,我会考虑使用mongodump的内置archiving and compression options来为您节省额外的一步。

由于您的mongodump输出明显小于存储大小,因此您的数据文件要么高度碎片化,要么还有其他一些您未考虑的数据,例如local中的索引或数据数据库。例如,如果您之前已将此服务器初始化为副本集成员,则local数据库将包含一个大型预分配replication oplogmongodump将不会将其导出。

您可以通过为WiredTiger集合运行compact命令来回收过多的未使用空间。但是,有一个重要的警告:在集合上运行compact将阻止正在运行的数据库的操作,因此这应仅在计划的维护期间使用。

  

MongoDB gzipped-tarball只有 118MB 而我的gpg文件只有 119MB

由于默认情况下mongodump输出未压缩,因此压缩可能会根据您的数据产生显着差异。但是,3.8GB到119MB似乎不合理,除非您的数据有一些特殊之处(大量的小型集合?重复数据?)。我会仔细检查您的恢复数据是否与收集计数,文档数量,数据大小和索引相匹配。