【问题标题】:Copying MongoDB Database into Local Machine将 MongoDB 数据库复制到本地计算机
【发布时间】:2014-01-21 00:28:08
【问题描述】:

我有一个 MongoDB 数据库,它驻留在本地网络上的 IP 地址为 192.168.1.20 的远程服务器机器上。出于开发和测试的目的,并且出于安全考虑,我不允许修改或删除服务器上的数据库,所以我想将数据库复制到我的本地机器上供我个人使用。

谁能告诉我,我该如何做到这一点?

【问题讨论】:

    标签: mongodb localhost local database


    【解决方案1】:

    copy database 命令我猜应该很适合你的需要。

    db.copyDatabase("DATABASENAME", "DATABASENAME", "localhost:27018");
    

    或者,您可以停止 MongoDb,将数据库文件复制到另一台服务器并在那里运行 MongoDb 实例。


    编辑 2020-04-25

    引用自 MongoDB 文档

    MongoDB 4.0 弃用了 copydbclone 命令及其 mongo shell 助手 db.copyDatabase()db.cloneDatabase()

    作为替代方案,用户可以使用mongodumpmongorestore(使用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】:

      我通过将远程数据库的转储创建到我的本地计算机来做到这一点,然后我将其恢复:

      1. 确保您有一个 mongo 实例启动并运行(例如,在终端窗口的 bin 文件夹中运行 mongod.exe。在我的 Windows 计算机上,它是 C:\mongodb\bin )

      2. 从远程数据库进行转储:打开一个新的终端窗口,再次移动到 bin 文件夹,运行:

        mongodump -h example.host.com --port 21018 -d dbname --username username --password yourpass

        (根据自己的情况更改参数。)

      3. 恢复转储的数据库: 转储完成后,运行以下命令以获得本地数据库:

        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 testmongorestore --collection people --db accounts dump/accounts/

        http://docs.mongodb.org/v2.2/reference/mongodump/ http://docs.mongodb.org/v2.2/reference/mongorestore/

        这甚至可以通过网络工作

        【讨论】:

          【解决方案6】:
          猜你喜欢
          • 2013-03-04
          • 2023-04-01
          • 1970-01-01
          • 2014-09-28
          • 2014-04-22
          • 1970-01-01
          • 1970-01-01
          • 2015-05-16
          • 1970-01-01
          相关资源
          最近更新 更多