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");
相關文章
相關標籤/搜索