Mongodb2.6 数据库和集合的复制(1)

Mongodb2.6 数据库和集合的复制

1. db.cloneCollection()
db.cloneCollection(from, collection, query)
在不同的mongodb实例间复制数据,db.cloneCollection是cloneCollection数据库命令的一个外在体现。
function (from, collection, query) {
    assert( isString(from) && from.length );
    assert( isString(collection) && collection.length );
    collection = this._name + "." + collection;
    query = query || {};
    return this._dbCommand( { cloneCollection:collection, from:from, query:query
} );
}
参数:
from        string        包含需要复制的表的mongodb实例主机名
collection    string        数据实例中需要复制的表名,该命令只可以复制远程mongodb实例上相同数据库名称的表
query        document    可选的选项。标准的查询语句过滤掉不需要的文档
db.cloneCollection()不允许通过mongos来复制表,只能通过mongod实例来操作。
示例:
192.168.11.51 mongod实例mydb库,bar集合:
{ "_id" : ObjectId("53687d9df433cf04b788c6d1"), "name" : "dog" }
{ "_id" : ObjectId("53687ff1f433cf04b788c6d2"), "name" : "cat" }
{ "_id" : ObjectId("53687ff4f433cf04b788c6d3"), "name" : "tiger" }
本地mongod实例mydb库,复制远程主机的bar集合中满足查询条件的文档:
db.cloneCollection("192.168.11.52", "bar", {"name" : "tiger"})
db.bar.find();
{ "_id" : ObjectId("53687ff4f433cf04b788c6d3"), "name" : "tiger" }

2. db.cloneDatabase()
db.cloneDatabase("hostname")
复制远程主机的数据库到本地,该命令假设远程mongodb实例中拥有与本地相同的数据库名称。
hostname        string        包含需要复制的数据库的mongodb实例主机名
db.cloneDatabase是clone数据库命令的一个外在体现。
function (from) {
    assert( isString(from) && from.length );
    return this._dbCommand( { clone: from } );
}
示例:
192.168.11.51 mongod实例mydb库,
本机mongodb实例:
use mydb
db.dropDatabase();
db.cloneDatabase("192.168.11.52");

3. db.copyDatabase()
db.copyDatabase(fromdb, todb, fromhost, username, password)
从远程主机复制数据库到本地,或从本地复制数据库到远程主机。
db.copyDatabase是copydb数据库命令的一个外在体现。
function (fromdb, todb, fromhost, username, password) {
    assert( isString(fromdb) && fromdb.length );
    assert( isString(todb) && todb.length );
    fromhost = fromhost || "";
    if ( username && password ) {
        var n = this._adminCommand( { copydbgetnonce : 1, fromhost:fromhost } );

        return this._adminCommand( { copydb:1, fromhost:fromhost, fromdb:fromdb,
 todb:todb, username:username, nonce:n.nonce, key:this.__pwHash( n.nonce, userna
me, password ) } );
    } else {
        return this._adminCommand( { copydb:1, fromhost:fromhost, fromdb:fromdb,
 todb:todb } );
    }
}
参数:
fromdb        string        源数据库名称
todb        string        目标数据库名称
fromhost    string        可选项,源数据库的主机名。如果是同一主机,忽略该选项
username    string        可选项,源主机名用户名
password    string        可选项,源主机名用户名对应密码
属性:
db.copyDatabase()运行在目标主机的mongod实例上。
db.copyDatabase()会创建目标数据库,如果其原来不存在。
db.copyDatabase()需要目标机器上有足够的空间进行复制。
db.copyDatabase()并不会产生目标数据库的即时快照。如果在复制过程中在源或目标库发生读写操作,会导致数据库不一致。
db.copyDatabase()在操作过程中并不会锁住目标主机,所以复制过程中可能出现暂时的中断来完成其他操作。
源数据库(fromdb)
mongodb2.6需要在源主机和目标主机拥有以下权限来执行copydb。
1)如果源主机数据库不是admin,必须确保拥有以下权限:
{ resource: { db: "mySourceDB", collection: "" }, actions: [ "find" ] }
{ resource: { db: "mySourceDB", collection: "system.js" }, actions: [ "find" ] }
如果源主机是一台远程主机,必须确保拥有以下权限:
{ resource: { db: "mySourceDB", collection: "system.indexes" }, actions: [ "find" ] }
{ resource: { db: "mySourceDB", collection: "system.namespaces" }, actions: [ "find" ] }
2)如果源主机数据库是admin,必须确保拥有以下权限:
{ resource: { db: "admin", collection: "" }, actions: [ "find" ] }
{ 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" ] }
如果源主机是一台远程主机,必须确保拥有以下权限:
{ resource: { db: "admin", collection: "system.indexes" }, actions: [ "find" ] }
{ resource: { db: "admin", collection: "system.namespaces" }, actions: [ "find" ] }
3)源数据库在远程主机
如果从一个拥有用户认证的远程主机复制数据库,需要一个拥有恰当的权限的用户认证。
目标数据库(todb)
1)如果目标主机数据库不是admin,必须确保拥有以下权限:
{ resource: { db: "myTargetDB", collection: "" }, actions: [ "insert", "createIndex" ] }
{ resource: { db: "myTargetDB", collection: "system.js" }, actions: [ "insert" ] }
2)如果目标主机数据库是admin,必须确保拥有以下权限:
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" ] }
示例:
192.168.11.51 mongod实例mydb库,
复制到本地newmydb库:
db.copyDatabase("mydb", "newmydb", "192.168.11.52");


你可能感兴趣的:(Mongodb2.6 数据库和集合的复制(1))