将 MongoDB 数据库复制到本地计算机
Posted
技术标签:
【中文标题】将 MongoDB 数据库复制到本地计算机【英文标题】:Copying MongoDB Database into Local Machine 【发布时间】:2014-01-21 00:28:08 【问题描述】:我有一个 MongoDB 数据库,它驻留在本地网络上的 IP 地址为 192.168.1.20 的远程服务器机器上。出于开发和测试的目的,并且出于安全考虑,我不允许修改或删除服务器上的数据库,所以我想将数据库复制到我的本地机器上供我个人使用。
谁能告诉我,我该如何做到这一点?
【问题讨论】:
【参考方案1】:有copy database 命令我猜应该很适合你的需要。
db.copyDatabase("DATABASENAME", "DATABASENAME", "localhost:27018");
或者,您可以停止 MongoDb,将数据库文件复制到另一台服务器并在那里运行 MongoDb 实例。
编辑 2020-04-25
引用自 MongoDB 文档
MongoDB 4.0 弃用了
copydb
和clon
e 命令及其 mongo shell 助手db.copyDatabase()
和db.cloneDatabase()
。作为替代方案,用户可以使用
mongodump
和mongorestore
(使用mongorestore
选项--nsFrom
和--nsTo
)或使用驱动程序编写脚本。
参考here
【讨论】:
非常感谢您的回复。我到底在哪里运行这个命令?很抱歉听起来像个菜鸟,因为我是 MongoDB 的新手,过去 24 小时一直在学习它。 在终端中,首先在终端中启动mongo然后执行这些命令 我收到/* 1 */ "ok" : 0.0, "errmsg" : "unauthorized"
我认为最好使用 mongodump 来解决这个问题
MongoDB 4.0 弃用了 copydb 和 clone 命令及其 mongo shell 帮助程序 db.copyDatabase() 和 db.cloneDatabase()。见docs.mongodb.com/manual/release-notes/4.0-compatibility/…【参考方案2】:
这应该是对@malla 答案的评论,但我没有足够的声誉发表评论,所以我将其发布在这里以供其他人参考。
在第 2 步中,当您尝试从远程服务器转储文件时,请记住添加 out 选项,以便您稍后可以在本地恢复:(在我第一次尝试时,我没有添加它并且它失败了,说转储\db_name 未找到)。我不确定我的方式是否有效。但它对我有用。
第 2 步:
mongodump -h example.host.com --port 21018 -d dbname --username username --password yourpass --out <path_you_want_to_dump>
第 3 步:
mongorestore -d theNameYouWantForYourLocalDB \<path_you_want_to_dump> + nameOfRemoteDB
【讨论】:
【参考方案3】:我通过将远程数据库的转储创建到我的本地计算机来做到这一点,然后我将其恢复:
确保您有一个 mongo 实例启动并运行(例如,在终端窗口的 bin 文件夹中运行 mongod.exe
。在我的 Windows 计算机上,它是 C:\mongodb\bin )
从远程数据库进行转储:打开一个新的终端窗口,再次移动到 bin 文件夹,运行:
mongodump -h example.host.com --port 21018 -d dbname --username username --password yourpass
(根据自己的情况更改参数。)
恢复转储的数据库: 转储完成后,运行以下命令以获得本地数据库:
mongorestore -d theNameYouWantForYourLocalDB dump\nameOfRemoteDB
(将 nameOfRemoteDB 替换为远程数据库的名称,与前面的命令相同,并将 theNameYouWantForYourLocalDB 替换为您希望新本地数据库具有的名称)
【讨论】:
最好的方法。 db.copyDatabase() 没有复制数据并跳过一些集合。我正在使用小型虚拟机,而一个仅用于 mongo。我不能从这些 vm 中转储并在我的计算机上执行此操作:mongodump -h 00.00.00.00 -d nameOfRemoteDB mongorestore -h 00.00.00.00 -d nameOfRemoteDB ./dump/db
是最好的操作。
您知道它将如何与具有副本集的数据库一起工作吗?
这个答案的第一部分很有帮助,所以 +1。我是Mongo的新手。尝试 mongorestore 步骤时出现此错误:The --db and --collection flags are deprecated for this use-case; please use --nsInclude instead, i.e. with --nsInclude=$DATABASE.$COLLECTION
docs.mongodb.com/database-tools/mongorestore/#examples【参考方案4】:
您可以使用mongoexport 命令将数据库复制到本地计算机。
【讨论】:
【参考方案5】:mongodb 有用于导入和导出的命令行工具。看看mongodump --collection collection --db test
和mongorestore --collection people --db accounts dump/accounts/
http://docs.mongodb.org/v2.2/reference/mongodump/ http://docs.mongodb.org/v2.2/reference/mongorestore/
这甚至可以通过网络工作
【讨论】:
【参考方案6】:mongoexport 命令: http://docs.mongodb.org/manual/core/import-export/
或者,mongodump 命令: http://docs.mongodb.org/manual/reference/program/mongodump/
【讨论】:
以上是关于将 MongoDB 数据库复制到本地计算机的主要内容,如果未能解决你的问题,请参考以下文章
我们可以将 MongoDB 嵌入到独立的应用程序中吗? [复制]