On this page
repairDatabase
On this page
Definition
repairDatabase-
Rebuilds the database and indexes by discarding invalid or corrupt data, which may be present due to an unexpected system restart or crash.
repairDatabaseis analogous to afsckcommand for file systems.Warning
- Before using
repairDatabase, make a backup copy of the files in the dbpath directory. - If you are running with journaling enabled, there is almost never any need to run
repairDatabaseunless you need to recover from a disk-level data corruption. In the event of an unclean shutdown, the server will be able to restore the data files to a clean state automatically. - Avoid running
repairDatabaseagainst a replica set. If you are trying to repair a replica set member, and you have access to an intact copy of your data (e.g. a recent backup or an intact member of the replica set), you should restore from that intact copy (see Resync a Member of a Replica Set), and not userepairDatabase. - You should only use the
repairDatabasecommand and associated wrappers if you have no other options. These operations remove and do not save any corrupt data during the repair process.
repairDatabasetakes the following form:{ repairDatabase: 1 }repairDatabasehas the following fields:Field Type Description preserveClonedFilesOnFailureboolean When
true,repairDatabasewill not delete temporary files in the backup directory on error, and all new files are created with the “backup” instead of “_tmp” directory prefix. By defaultrepairDatabasedoes not delete temporary files, and uses the “_tmp” naming prefix for new files.Changed in version 3.0:
preserveClonedFilesOnFailureis only available with themmapv1storage engine.backupOriginalFilesboolean When
true,repairDatabasemoves old database files to the backup directory instead of deleting them before moving new files into place. New files are created with the “backup” instead of “_tmp” directory prefix. By default,repairDatabaseleaves temporary files unchanged, and uses the “_tmp” naming prefix for new files.Changed in version 3.0:
backupOriginalFilesis only available with themmapv1storage engine.You can explicitly set the options as follows:
{ repairDatabase: 1, preserveClonedFilesOnFailure: <boolean>, backupOriginalFiles: <boolean> }See
mongod --repairandmongodump --repairfor information on these related options. - Before using
repairDatabase Wrappers
You may invoke repairDatabase from multiple contexts:
Use the
mongoshell to run the command, as above.Use the
db.repairDatabase()in themongoshell.Run
mongoddirectly from your system’s shell. Make sure thatmongodisn’t already running, and that you invokemongodas a user that has access to MongoDB’s data files:mongod --repairFor MMAPv1, you can specify a temporary working directory that the command will use during the repair operation:
mongod --repair --repairpath /opt/vol2/dataSee
repairPathfor more information.
Behavior
Warning
This command obtains a global write lock and will block other operations until it has completed.
The time requirement for repairDatabase depends on the size of the data set.
repairDatabase recreates all indexes in the database.
MMAPv1
repairDatabase requires free disk space equal to the size of your current data set plus 2 gigabytes. If the volume that holds dbpath lacks sufficient space, you can mount a separate volume and use that for the repair. When mounting a separate volume for repairDatabase you must run repairDatabase from the command line and use the --repairpath switch to specify the folder in which to store temporary repair files.
WiredTiger
repairDatabase performs the operation in-place and does not require additional disk space.
repairDatabase and compact
The repairDatabase command rebuilds the database, which for MMAPv1, has a secondary effect of compacting all the collections.
For WiredTiger, the operation rebuilds the database but does not result in the compaction of the collections in the database.
See also
Example
Warning
If you are trying to repair a replica set member, and you have access to an intact copy of your data (e.g. a recent backup or an intact member of the replica set), see Resync a Member of a Replica Set instead.
If you are running with journaling enabled, there is almost never any need to run repairDatabase unless you need to recover from a disk-level data corruption. In the event of an unclean shutdown, the server will be able to restore the data files to a clean state automatically.
Use repairDatabase if you have no other option.
Before using repairDatabase, make a backup copy of the data files in the dbpath.
db.runCommand( { repairDatabase: 1 } )