On this page
repairDatabase
在本页面
Definition
repairDatabase
- 通过丢弃无效或损坏的数据来重建数据库和索引,这些数据可能由于系统意外重启或崩溃而存在。 repairDatabase类似于文件系统的
fsck
命令。
- 通过丢弃无效或损坏的数据来重建数据库和索引,这些数据可能由于系统意外重启或崩溃而存在。 repairDatabase类似于文件系统的
Warning
在使用repairDatabase之前,请备份 dbpath 目录中的文件。
如果您在启用journaling的情况下运行,则几乎不需要运行repairDatabase,除非您需要从磁盘级数据损坏中恢复。如果发生异常关闭,服务器将能够自动将数据文件还原到干净状态。
避免对副本集运行repairDatabase。如果您要修复replica set成员,并且可以访问数据的完整副本(例如,最近的备份或replica set的完整成员),则应从该完整副本中恢复(请参见重新同步副本集的成员),并且 不 使用repairDatabase。
如果没有其他选择,则只能使用repairDatabase命令和associated wrappers。这些操作将在修复过程中删除并且不会保存任何损坏的数据。
repairDatabase采用以下形式:
{ repairDatabase: 1 }
repairDatabase具有以下字段:
Field | Type | Description |
---|---|---|
preserveClonedFilesOnFailure |
boolean | 如果为true ,则repairDatabase 不会错误删除备份目录中的临时文件,并且所有新文件都使用“ backup”而不是“ _tmp”目录前缀创建。默认情况下,repairDatabase 不会删除临时文件,而是对新文件使用“ _tmp”命名前缀。 |
在版本 3.0 中更改:preserveClonedFilesOnFailure
仅可用于mmapv1
存储引擎。
| backupOriginalFiles
|布尔值|当true
时,repairDatabase
将旧数据库文件移动到备份目录,而不是在将新文件移动到位之前删除它们。使用“备份”而不是“ _tmp”目录前缀创建新文件。默认情况下,repairDatabase
保留临时文件不变,并为新文件使用“ _tmp”命名前缀。
在版本 3.0 中更改:backupOriginalFiles
仅可用于mmapv1
存储引擎。
您可以如下明确设置选项:
{ repairDatabase: 1,
preserveClonedFilesOnFailure: <boolean>,
backupOriginalFiles: <boolean> }
有关这些相关选项的信息,请参见mongod --repair和mongodump --repair。
repairDatabase Wrappers
您可以从多个上下文调用repairDatabase:
如上所述,使用mongo shell 运行命令。
在mongo shell 中使用db.repairDatabase()。
直接从系统的 Shell 运行mongod。确保mongod尚未运行,并且以具有访问 MongoDB 数据文件访问权限的用户身份调用mongod:
mongod --repair
对于 MMAPv1,可以指定命令在修复操作期间将使用的临时工作目录:
mongod --repair --repairpath /opt/vol2/data
有关更多信息,请参见repairPath。
Behavior
Warning
该命令获得全局写锁定,并将阻止其他操作,直到完成为止。
repairDatabase的时间要求取决于数据集的大小。
repairDatabase重新创建数据库中的所有索引。
MMAPv1
repairDatabase要求的可用磁盘空间等于您当前数据集的大小再加上 2 GB。如果保存 dbpath 的卷缺少足够的空间,则可以装入单独的卷并将其用于修复。为repairDatabase挂载单独的卷时,必须从命令行运行repairDatabase并使用--repairpath开关指定用于存储临时修复文件的文件夹。
WiredTiger
repairDatabase原位执行操作,不需要额外的磁盘空间。
repairDatabase and compact
repairDatabase命令重建数据库,对于 MMAPv1,该数据库具有压缩所有集合的辅助作用。
对于 WiredTiger,该操作将重建数据库,但不会导致数据库中集合的压缩。
See also
Example
Warning
如果您尝试修复replica set成员,并且可以访问数据的完整副本(例如,最近的备份或replica set的完整成员),请参见重新同步副本集的成员。
如果您在启用journaling的情况下运行,则几乎不需要运行repairDatabase,除非您需要从磁盘级数据损坏中恢复。如果发生异常关闭,服务器将能够自动将数据文件还原到干净状态。
如果没有其他选择,请使用repairDatabase。
使用repairDatabase之前,请在 dbpath 中制作数据文件的备份副本。
db.runCommand( { repairDatabase: 1 } )