如何将 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,所以这并不麻烦。如果您想移动一个完整的数据库,可以调整这些说明,但这取决于您。
- 弄清楚你想移动哪个collection。为此,在 Cloud9 中,在适当的目录中,在您的命令行中,运行 以下命令,并记住或记下您识别的数据库和 collection。 (如果你不确定 collections,你可以执行 db.(collection).find() 来输出它拥有的数据列表)
mongo
show dbs
use (the name of the appropriate db, not in parentheses though)
show collections
- 从您的数据库中导出数据。那是相对容易的。只需使用 ctrl+c 退出 mongo,然后在命令行中使用以下代码,填充数据且不带括号:
mongoexport --db (your db name) --collection (your collection name) --outs (a filename: mongodb.org recommends "traffic.json", no quotes)
- 现在您需要将数据导入 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?>
- 为了成功通过导入,您应该检查您的 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/
所以我使用 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,所以这并不麻烦。如果您想移动一个完整的数据库,可以调整这些说明,但这取决于您。
- 弄清楚你想移动哪个collection。为此,在 Cloud9 中,在适当的目录中,在您的命令行中,运行 以下命令,并记住或记下您识别的数据库和 collection。 (如果你不确定 collections,你可以执行 db.(collection).find() 来输出它拥有的数据列表)
mongo
show dbs
use (the name of the appropriate db, not in parentheses though)
show collections
- 从您的数据库中导出数据。那是相对容易的。只需使用 ctrl+c 退出 mongo,然后在命令行中使用以下代码,填充数据且不带括号:
mongoexport --db (your db name) --collection (your collection name) --outs (a filename: mongodb.org recommends "traffic.json", no quotes)
- 现在您需要将数据导入 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?>
- 为了成功通过导入,您应该检查您的 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/