db.copyDatabase()

在本页面

Definition

将数据库从一个mongod实例复制到当前mongod实例或在当前mongod内。 db.copyDatabase()包装copydb命令并接受以下参数:

Parameter Type Description
fromdb string 源数据库的名称。
todb string 目标数据库的名称。
fromhost string 可选的。源mongod实例的主机名。忽略在同一mongod实例中复制数据库。
username string 可选的。 fromhost MongoDB 实例上的用户名。用户验证到fromdb


有关更多信息,请参见对源 mongod 实例的身份验证
| password |字符串|可选。 fromhost上用于身份验证的密码。该方法“不”以明文形式传输密码。
有关更多信息,请参见对源 mongod 实例的身份验证
| mechanism |字符串|可选。验证fromhost上的usernamepassword的机制。请指定:
SCRAM-SHA-1, or
MONGODB-CR(在 MongoDB 3.6 中已弃用)。
如果有线协议版本(maxWireVersion)大于或等于3(即 MongoDB 3.0 或更高版本),则db.copyDatabase默认为SCRAM-SHA-1。否则,默认为MONGODB-CR
指定MONGODB-CR以从 3.0 或更高版本的实例认证到 2.6.x fromhost版本。有关示例,请参见从执行身份验证的 mongod 实例复制数据库
3.0 版中的新功能。

Behavior

功能兼容版本

您无法在具有featureCompatibilityVersion (FCV) 3.6 的mongod实例与 MongoDB 版本 3.4 和更早的mongod实例之间复制数据。

For example:

Instance 1 Instance 2
具有 FCV 3.6 的 3.6 版mongod 具有 FCV 3.6 的 3.6 版mongod 可以复制数据。
具有 FCV 3.6 的 3.6 版mongod 具有 FCV 3.4 的 3.6 版mongod 可以复制数据。
具有 FCV 3.6 的 3.6 版mongod 具有 FCV 3.4 的 3.4 版mongod 无法复制数据。实例 2 必须是 MongoDB 3.6 版
具有 FCV 3.4 的 3.6 版mongod 具有 FCV 3.4 的 3.4 版mongod 可以复制数据。
具有 FCV 3.4 的 3.6 版mongod 版本 3.2 mongod 可以复制数据。

复制数据的操作包括:

Destination

对源 mongod 实例的身份验证

fromhost实例进行身份验证时,db.copyDatabase()fromdb用作指定用户的authentication database

有关所需访问和身份验证的更多信息,请参见Required Access

Concurrency

Indexes

MongoDB 在通过db.copyDatabase()复制的数据库上执行索引的前台构建。前台index builds锁定数据库并阻止对该数据库进行所有其他操作,直到前台构建完成。构建索引时,对其他数据库的性能也可能会产生影响。

您可以使用db.currentOp()命令跟踪正在进行的索引创建操作。

Sharded Clusters

Required Access

在 2.6 版中进行了更改。

源数据库(fromdb)

如果* source 数据库(fromdb)的mongod实例强制access control,则您必须对 source *数据库具有适当的授权。

如果要从另一个实施access controlmongod实例(fromhost)复制,则必须通过指定usernamepassword和可选的mechanism来认证fromhost实例。该方法“不”以明文形式传输密码。

fromhost实例进行身份验证时,db.copyDatabase()fromdb用作指定用户的authentication database

fromhost实例进行身份验证时,db.copyDatabase()支持SCRAM-SHA-1MONGODB-CR机制来对fromhost用户进行身份验证。

来源是非 Management 员数据库

在版本 3.0 中更改。

如果源数据库是非admin数据库,则您必须具有特权,这些特权指定源数据库上的findlistCollectionslistIndexes操作,以及源数据库中system.js集合上的find操作。

{ resource: { db: "mySourceDB", collection: "" }, actions: [ "find", "listCollections", "listIndexes" ] },
{ resource: { db: "mySourceDB", collection: "system.js" }, actions: [ "find" ] },

来源是 Management 员数据库

在版本 3.0 中更改。

如果源数据库是admin数据库,则必须具有特权,这些特权指定admin数据库上的findlistCollectionslistIndexes操作,以及admin数据库中的system.jssystem.userssystem.rolessystem.version集合上的find操作。例如:

{ resource: { db: "admin", collection: "" }, actions: [ "find",  "listCollections", "listIndexes" ] },
{ resource: { db: "admin", collection: "system.js" }, actions: [ "find" ] },
{ resource: { db: "admin", collection: "system.users" }, actions: [ "find" ] },
{ resource: { db: "admin", collection: "system.roles" }, actions: [ "find" ] },
{ resource: { db: "admin", collection: "system.version" }, actions: [ "find" ] }

目标数据库(todb)

如果* target 数据库(todb)的mongod实例强制access control,则您必须对 target *数据库具有适当的授权。

从非 Management 员数据库复制

如果源数据库不是admin数据库,则必须具有特权,这些特权指定目标数据库上的insertcreateIndex操作,以及目标数据库上system.js集合上的insert操作。例如:

{ resource: { db: "myTargetDB", collection: "" }, actions: [ "insert", "createIndex" ] },
{ resource: { db: "myTargetDB", collection: "system.js" }, actions: [ "insert" ] }

从 Management 员数据库复制

如果源数据库是admin数据库,则您必须具有在目标数据库上指定insertcreateIndex操作,并在目标数据库中的system.jssystem.userssystem.rolessystem.version集合上指定insert操作的特权。例如:

{ resource: { db: "myTargetDB", collection: "" }, actions: [ "insert", "createIndex" ] },
{ resource: { db: "myTargetDB", collection: "system.js" }, actions: [ "insert" ] },
{ resource: { db: "myTargetDB", collection: "system.users" }, actions: [ "insert" ] },
{ resource: { db: "myTargetDB", collection: "system.roles" }, actions: [ "insert" ] },
{ resource: { db: "myTargetDB", collection: "system.version" }, actions: [ "insert" ] }

Example

从同一 mongod 实例复制

要在同一mongod实例中复制,请省略fromhost

以下操作将名为records的数据库复制到名为archive_records的数据库:

db.copyDatabase('records', 'archive_records')

从执行身份验证的 mongod 实例复制数据库

如果要从另一个实施access controlmongod实例(fromhost)复制,则必须通过指定usernamepassword和可选的mechanism来认证fromhost实例。该方法“不”以明文形式传输密码。

fromhost实例进行身份验证时,db.copyDatabase()fromdb用作指定用户的authentication database

在版本 3.0 中进行了更改:MongoDB 3.0 支持传递用于fromhost的身份验证机制。

以下操作从在example.net上运行并强制执行访问控制的 3.4 mongod版本实例中复制名为reporting的数据库。

db.copyDatabase(
   "reporting",
   "reporting_copy",
   "example.net",
   "reportUser",
   "abc123",
   "SCRAM-SHA-1"
)

See also

clone

首页