为什么mongodump不备份索引?

Hem*_*nde 8 mongodb

在阅读mongodump文档时,我发现了这些信息."mongodump只在其备份数据中捕获数据库中的文档,并且不包括索引数据.然后mongorestore或mongod必须在恢复数据后重建索引."

考虑到索引也是数据库难题的关键部分,并且它们需要重建,为什么mongodump没有选择使用索引进行备份?

我知道没有备份索引作为默认选项有两个好处:1.我们节省了备份和恢复索引所需的时间.2.我们节省了存储备份所需的空间.

但为什么不把它作为一种选择呢?

Ste*_*nie 8

mongodump从MongoDB数据库创建数据的二进制导出(BSON格式).索引定义<dbname>.metadata.json文件中备份,因此mongorestore可以重新创建原始数据和索引.

无法备份实际索引的主要原因有两个mongodump:

  • 索引指向数据文件中的位置.如果仅导出数据文件中的文档(而不是获取数据文件的完整文件副本),则数据文件不存在.

  • 磁盘上的索引格式是特定于存储引擎的,而mongodump旨在独立于存储引擎.

如果要完整备份数据和索引,则需要通过复制基础数据文件进行备份(通常使用文件系统或EBS快照).对于大型部署来说,这是一个更常见的选项,因为mongodump需要将所有数据读入mongod进程(如果数据库大于内存,则会占用一些工作集).