我有一个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();
运行了相同的命令,结果是:
答案 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 oplog,mongodump
将不会将其导出。
您可以通过为WiredTiger集合运行compact
命令来回收过多的未使用空间。但是,有一个重要的警告:在集合上运行compact
将阻止正在运行的数据库的操作,因此这应仅在计划的维护期间使用。
MongoDB gzipped-tarball只有 118MB 而我的
gpg
文件只有 119MB 。
由于默认情况下mongodump
输出未压缩,因此压缩可能会根据您的数据产生显着差异。但是,3.8GB到119MB似乎不合理,除非您的数据有一些特殊之处(大量的小型集合?重复数据?)。我会仔细检查您的恢复数据是否与收集计数,文档数量,数据大小和索引相匹配。