为什么 mongodump 不备份索引



在阅读mongodump文档时,我遇到了这些信息。"Mongodump 只在其备份数据中捕获数据库中的文档,不包括索引数据。然后,Mongorestore 或 Mongod 必须在恢复数据后重建索引。

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

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

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

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

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

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

  • 磁盘上的索引格式特定于存储引擎,而mongodump则与存储引擎无关。

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

最新更新