2011-03-31 112 views
44

我在不同的服務器上有兩個mongodbs,都以--auth開頭。現在我想將一個數據庫從一臺服務器複製到另一臺服務器。如何將數據庫從一個MongoDB服務器複製到另一個?

> mongo 
> use admin 
> db.copyDatabase("mydb","mydb","another_server") 

它顯示:

{ "errmsg" : "", "ok" : 0 } 

和:

> db.getLastError() 
null 

似乎沒有錯誤,但複製是沒有成功。什麼是正確的命令使用?

回答

73

如果您正在使用--auth,則需要包括您的用戶名/在那裏密碼...

你也必須「目標」的服務器上,當你運行該命令。

db.copyDatabase(<from_db>, <to_db>, <from_hostname>, <username>, <password>); 

如果所有不工作,你可能想嘗試的東西,如創建要複製數據庫的奴隸......

+0

謝謝你這麼多,作品〜 – Freewind 2011-03-31 05:02:02

+2

提到的用戶名和密碼是用於數據庫而不是主機名稱 PS:我犯了這個錯誤,因此提到它:) – shammerw0w 2014-04-21 18:36:05

+1

非常感謝,非常有幫助的回答:) – 2016-07-08 15:08:36

16

除了賈斯汀詹金斯記住答案你也可以使用SSH通道,如果你沒有暴露於網絡的MongoDB(僅限本地主機)

我使用屏幕在「任務」之間切換。爲了我的方便,SSH隧道和mongo在單獨的屏幕標籤中執行。

第1步:創建一個隧道

ssh [email protected] -L 27018:localhost:27017 
...Enter your password 

第2步:

mongo 
use admin 
db.copyDatabase(<fromdb>,<todb>,"localhost:27018",<username>,<password) 
+2

只是爲了澄清這些說明,對於那些從未創建過SSH隧道的人來說:27018這裏是一個不使用的任意本地端口。爲確保不使用,請使用「lsof -ti:9000」。如果進程返回,請使用lsof來查找未使用的端口。此答案中的第二個27017端口是mongo端口正在運行,位於正在複製的遠程主機上。爲確保這是正確的,請登錄到遠程主機並確認mongo正在此端口上運行:「lsof -iTCP -sTCP:LISTEN | grep mongo」。 – huwiler 2017-03-02 16:04:08

11

3.2Mongo版本開始,你可以通過使用mongodump/mongorestore做到這一點:

mongodump --host <from_host> --db <from_db> --archive | mongorestore --host <to_host> --archive 

附加信息可能找到:

https://docs.mongodb.com/manual/reference/program/mongodump/ https://docs.mongodb.com/manual/reference/program/mongorestore/

進行遠程蒙戈可達您可以創建SSH隧道到它:

ssh -fN -L 27017:localhost:27117 <remote_host> 

在這種情況下,命令可能是:

mongodump --port 27117 --db <from_db> --archive | mongorestore --archive 
相關問題