- Reference >
- Database Commands >
- Administration Commands >
- copydb
copydb¶
On this page
Definition¶
-
copydb¶ 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.usernamestring Optional. The name of the user on the
fromhostMongoDB instance. The user authenticates to thefromdb.For more information, see Authentication to Source mongod Instance.
noncestring Optional. A single use shared secret generated on the remote server, i.e.
fromhost, using thecopydbgetnoncecommand.For more information, Generate nonce and key.
keystring Optional. A hash of the password used for authentication. For more information, Generate nonce and key. 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.When authenticating to the
fromhostinstance,copydbuses MONGODB-CR mechanism to authenticate thefromhostuser. To authenticate users with SCRAM-SHA-1 mechanism, use thedb.copyDatabase()method.
Behavior¶
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¶
If copying from another
mongodinstance (fromhost) that enforcesaccess control, then you must authenticate to thefromhostinstance by specifying theusername,nonce, andkey.When authenticating to the
fromhostinstance,copydbuses thefromdbas the authentication database for the specified user.When authenticating to the
fromhostinstance,copydbuses MONGODB-CR mechanism to authenticate thefromhostuser. To authenticate users with SCRAM-SHA-1 mechanism, use thedb.copyDatabase()method.
For more information on required access and authentication, see Required Access.
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¶
Changed in version 2.6.
If the mongod instance of the source database (fromdb)
enforces access control, you must
have proper authorization for the source database.
If copying from another mongod instance (fromhost)
that enforces access control,
then you must authenticate to the fromhost instance by specifying
the username, nonce, and key.
When authenticating to the fromhost instance, copydb uses the
fromdb as the authentication database for the specified user.
When authenticating to the fromhost instance, copydb
uses MONGODB-CR mechanism to
authenticate the fromhost user. To authenticate users with
SCRAM-SHA-1 mechanism, use the
db.copyDatabase() method.
Source Database (fromdb)¶
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:
Generate nonce and key¶
If copying from another mongod instance that enforces access
control, then you must include a username, nonce, and key
to authenticate to that instance as a user with proper access.
Tip
The db.copyDatabase() handles the generation of the
nonce and key.
nonce¶
The nonce is a one-time password that you request from the remote
server using the copydbgetnonce command, as in the following:
If running the copydbgetnonce command directly on the
remote host, you can omit the fromhost field in the
copydbgetnonce command.
key¶
The key is a hash generated as follows:
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:
Copy Databases from a mongod Instances that Enforce Authentication¶
If copying from another mongod instance (fromhost)
that enforces access control,
then you must authenticate to the fromhost instance by specifying
the username, nonce, and key.
When authenticating to the fromhost instance, copydb uses the
fromdb as the authentication database for the specified user.
Note
When authenticating to the fromhost instance, copydb
uses MONGODB-CR mechanism to
authenticate the fromhost user. To authenticate users with
SCRAM-SHA-1 mechanism, use the
db.copyDatabase() method.
The following command copies the test database from a
mongod instance that runs on the remote host example.net
and enforces access control:
See also