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");