- Reference >
- Database Commands >
- Administration Commands >
- copydb
copydb¶
On this page
Definition¶
-
copydb¶ Deprecated since version 4.0: MongoDB deprecates
copydband its helperdb.copyDatabase(). For information on alternatives, see copydb and clone Commands.Copies a database either from one
mongodinstance to the currentmongodinstance or within the currentmongod. Runcopydbin theadmindatabase of the destination server with the following syntax:copydbaccepts the following options:Field Type Description fromhoststring Optional. The hostname of the source mongodinstance. Omit to copy databases within the samemongodinstance.fromdbstring Name of the source database. todbstring Name of the target database. slaveOkboolean Optional. Set slaveOKtotrueto allowcopydbto copy data from secondary members as well as the primary.fromhostmust also be set.writeConcerndocument Optional. A document that expresses the write concern for the operation. Omit to use the default write concern. bypassDocumentValidationboolean Optional. Enables
copydbto bypass document validation during the operation. This lets you insert documents that do not meet the validation requirements.New in version 3.2.
The
mongoshell provides thedb.copyDatabase()wrapper for thecopydbcommand.
Behavior¶
Feature Compatibility Version¶
You cannot copy data between a MongoDB 4.0 mongod
instance with featureCompatibilityVersion (FCV) 4.0
and a MongoDB version 3.6 mongod instance.
Note
You cannot copy data between a MongoDB 4.0 mongod
instance (regardless of the FCV value) and a MongoDB 3.4 and earlier
mongod instance.
For example:
| Instance 1 | Instance 2 | |
|---|---|---|
Version 4.0 mongod with FCV 4.0 |
Version 4.0 mongod with FCV 4.0 |
Can copy data. |
Version 4.0 mongod with FCV 4.0 |
Version 4.0 mongod with FCV 3.6 |
Can copy data. |
Version 4.0 mongod with FCV 4.0 |
Version 3.6 mongod with FCV 3.6 |
Cannot copy data. Instance 2 must be a MongoDB version 4.0 |
Version 4.0 mongod with FCV 3.6 |
Version 3.6 mongod with FCV 3.6 |
Can copy data. |
Version 4.0 mongod with FCV 3.6 |
Version 3.6 mongod with FCV 3.4 |
Can copy data. |
In general, if the mongod instance has its
featureCompatibilityVersion (FCV) set to its MongoDB
version, you cannot copy data between that instance and a
mongod instance of an earlier MongoDB version.
Operations that copy data include:
db.cloneCollection()and the commandcloneCollectiondb.cloneDatabase()and the commandclonedb.copyDatabase()and the commandcopydb
Destination¶
- Run
copydbin theadmindatabase of the destinationmongodinstance, i.e. the instance receiving the copied data. copydbcreates the target database if it does not exist.- If the target database exists and no collection from the source database
exists in the target database,
copydbcopies the collections from the source database to the target database. If any collection from the source database exists in the target database,copydberrors out and does not copy any remaining collections from the source database. copydbrequires enough free disk space on the host instance for the copied database. Use thedb.stats()operation to check the size of the database on the sourcemongodinstance.
Authentication to Source mongod Instance¶
To copy from another mongod instance (fromhost) that
enforces access control, then you
must use the mongo shell method
db.copyDatabase().
Concurrency¶
copydbandclonedo not produce point-in-time snapshots of the source database. Write traffic to the source or destination database during the copy process will result in divergent data sets.copydbdoes not lock the destination server during its operation, so the copy will occasionally yield to allow other operations to complete.
Indexes¶
MongoDB performs foreground builds of indexes on databases copied via
copydb. Foreground index builds lock the
database and prevent all other operations on that database until the
foreground build completes. There may also be a performance impact on
other databases while the indexes build.
You can keep track of ongoing index creation operations with the db.currentOp() command.
Replica Sets¶
With read preference configured to set the slaveOk option
to true, you may run copydb on a secondary
member of a replica set.
Required Access¶
Source Database (fromdb)¶
If you are copying within the same mongod instance that enforces access control, you must have the appropriate authorization.
If you are copying from a different mongod instance that
enforces access control, see db.copyDatabase().
Source is non-admin Database¶
Changed in version 3.0.
If the source database is a non-admin database, you must have
privileges that specify find,
listCollections, and listIndexes actions
on the source database, and find action on the
system.js collection in the source database.
Source is admin Database¶
Changed in version 3.0.
If the source database is the admin database, you must have
privileges that specify find,
listCollections, and listIndexes actions
on the admin database, and find action on the
system.js, system.users, system.roles, and
system.version collections in the admin database. For
example:
Target Database (todb)¶
If the mongod instance of the target database (todb)
enforces access control, you must
have proper authorization for the target database.
Copy from non-admin Database¶
If the source database is not the admin database, you must have
privileges that specify insert and
createIndex actions on the target database, and
insert action on the system.js collection in the
target database. For example:
Copy from admin Database¶
If the source database is the admin database, you must have
privileges that specify insert and
createIndex actions on the target database, and
insert action on the system.js, system.users,
system.roles, and system.version collections in the target
database. For example:
Examples¶
Copy from the Same mongod Instance¶
To copy from the same host, omit the fromhost field.
The following command copies the test database to a new records
database on the current mongod instance:
Copy from a Remote Host to the Current Host¶
To copy from a remote host, include the fromhost field.
The following command copies the test database from the remote host
example.net to a new records database on the current
mongod instance:
To copy from another mongod instance (fromhost) that
enforces access control, then you
must use the mongo shell method
db.copyDatabase().
See also