如何将 MongoDB 数据库从 cloud9 导出到 mlab?

How to export MongoDB database from cloud9 to mlab?

所以我使用 Node.js、mongoDB、express 在 cloud9 上创建了一个网络应用程序。我按照说明在云 9 中设置了 MongoDB。

完成应用程序后,我将其部署到 Heroku,并在 mlab (mongolab) 中创建了一个新数据库。这很好用。

但是,我在 cloud9 上托管的数据库中插入了大量虚拟数据。 我想将此虚拟数据从 cloud9 中的数据库复制到 mlab 中的数据库。我该怎么做?


我做了一些研究。

根据 mongodb 文档,我应该使用 db.copyDatabase():

db.copydatabase(fromdb,todb,fromhost,username,password,mechanism)

它说我应该 运行 在目标实例中执行此命令,即接收复制数据的实例。

我假设这意味着我应该通过以下方式连接到 mlab 上托管的数据库: mongo dsblahblah.mlab.com:59220/blahblah -u -p

然后 运行 db.copyDatabase 命令,正确吗?

但是我应该为 fromdb 参数使用什么?这是托管在 cloud9 中的数据库。但是这个数据库的 url 是什么?

求助。还有ELI5.

从 Cloud9 进行数据库转储。 https://docs.mongodb.com/manual/reference/program/mongoexport/

然后将文件导入MLab。这比尝试编写自动化方法要容易得多,除非您将来会一遍又一遍地进行此传输。

Nathan Loyer 给出了正确的答案,尽管答案当然比这更复杂。如果你像我一样,并不真正知道自己在做什么,这里有一个对我有用的详细解释,以及我在底部获得这些信息的资源,以防任何更新并让你过时。

请注意,您需要为每个要迁移的 collection 执行此操作。很可能您只有一个或几个 collection,所以这并不麻烦。如果您想移动一个完整的数据库,可以调整这些说明,但这取决于您。

  1. 弄清楚你想移动哪个collection。为此,在 Cloud9 中,在适当的目录中,在您的命令行中,运行 以下命令,并记住或记下您识别的数据库和 collection。 (如果你不确定 collections,你可以执行 db.(collection).find() 来输出它拥有的数据列表)
mongo
show dbs
use (the name of the appropriate db, not in parentheses though)
show collections
  1. 从您的数据库中导出数据。那是相对容易的。只需使用 ctrl+c 退出 mongo,然后在命令行中使用以下代码,填充数据且不带括号:
mongoexport --db (your db name) --collection (your collection name) --outs (a filename: mongodb.org recommends "traffic.json", no quotes)
  1. 现在您需要将数据导入 mLabs。转到 mLabs,select 您的数据库,然后选择 "tools" 菜单。您应该会在 "JSON" 下看到用于导入的 pre-fab 代码。使用您从 mLab 获得的数据库用户凭据再次填空,但不要运行它。它应该看起来像:
mongoimport -h ds12345.mlab.com:12121 -d databasename -c <collection> -u <user> -p <password> --file <input file, possibly traffic.json?>
  1. 为了成功通过导入,您应该检查您的 Cloud9 和 mLabs 实例是否 运行ning 在相同(或至少非常相似的版本)上。在 cloud9 中,只需在控制台中输入 "mongo" 并查看其内容。您可能使用的是 2.6 或 3.2。在 mLab 上,它几乎出现在每一页上。只需查找 "mongod version: xxxxx." 您可能使用的是 3.4.7。我 运行 它作为 Cloud9 3.2 和 mLab 3.4,并且运行良好。 (如果您的 Cloud9 版本低于 3,请备份任何重要内容(使用 git?)并按照 https://community.c9.io/t/updating-mongodb/3914 中的说明进行更新)

您需要做的另一件事是停止 Cloud9 中的所有进程,包括从根目录运行的 Mongod。这是您需要 运行 mongo 导入的地方(不是从工作区某个目录内的命令行导入,这是我告诉您 运行 mongo 导出的地方).要清楚:您的命令行应该显示 "username: ~$",而不是 "username:~/workspace/filedirectories/maybeafewofthem (possibly master) $".

由于您是从根目录 运行ning,您还需要确保正确引用了您传递的文件名。它不会像 "traffic.json." 那样简单,它应该看起来像 "workspace/directoryName/traffic.json."(如果您的导出成功,您应该会看到 traffic.json 文件漂浮在您的文件周围的某个地方。)

就是这样。 运行 步骤 3 中的代码,并在 mLabs 中检查它是否正确处理。很高兴。

资源:

http://docs.mlab.com/connecting/

http://docs.mlab.com/migrating/

https://docs.mongodb.com/manual/reference/program/mongoexport/

https://docs.mongodb.com/manual/reference/program/mongoimport/