repair 基本上就是 mongodump 加 mongorestore,通过这一过程将数据都整理出来,形成整洁的数据副本,移除文件的所有数据碎片。(当有大量删除或者更新而导致数据移动,集合中就会出现很多空洞。)repair 会以压缩形式重新插入数据。

使用 repair 还有些注意事项。

  • 这样会阻塞操作,所以不要在活跃节点上执行。一般先在热备节点上执行,然后让活跃节点和热备节点交换角色,再在原来的活跃节点(现在是热备节点)上执行这个操作
  • 需要使用是原来数据库两倍的磁盘空间。(比方说,若有 200 GB 的数据,则还要至少 200 GB 的空闲磁盘空间才能运行 repair。)

很多人都会遇到的一个问题就是要通过 repair 处理的数据量太大,比如数据库可能有 500 GB,整个服务器的硬盘也就 700 GB。这种情况下,就只能用 mongodump 和 mongorestore 来进行 "手工"恢复了。