【问题标题】:Import a mongo database form local to Ubuntu droplet on Digital Ocean?将 mongodb 数据库从本地导入到 Digital Ocean 上的 Ubuntu droplet?
【发布时间】:2018-01-13 12:34:26
【问题描述】:

我在数字海洋上有一个 Ubuntu 16.04.3 x64 液滴。如何从本地机器上的文件系统导入数据库?

我的应用是用 Meteor 构建的。从我的应用程序文件夹本地运行时,以下内容有效:

mongorestore --port=3001 ../dump

我已经尝试通过 SSH 连接到服务器

ssh root@<my servers IP>

然后运行相同的命令:

mongorestore --port=3001 /Users/<my username>/Projects/<project name>/dump

但我得到一个错误:

The program 'mongorestore' is currently not installed. You can install it by typing:
apt install mongodb-clients

所以我尝试输入 mongod:

docker exec -it mongodb mongo nomad

我收到一条成功消息:

MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017/nomad
MongoDB server version: 3.4.1

我尝试相同的命令:

mongorestore --port=3001 /Users/<my username>/Projects/<project name>/dump

我得到这个错误:

2018-01-13T12:30:25.134+0000 E QUERY    [main] SyntaxError: missing ; before statement @(shell):1:15

【问题讨论】:

  • 您能否提供有关如何将本地 mongodump 完成到数字海洋 mongorestore 的指南?我现在也是同样的情况,也在跑流星。 ??????

标签: mongodb meteor digital-ocean


【解决方案1】:

mongorestore 是一个 shell 命令,你可以从 bash 运行它。你运行的 mongoshell 的语法有限,所以它不会那样工作。

你可以试试这样的:

docker exec -it mongodb mongorestore  /Users/<my username>/Projects/<project name>/dump

问题是您尝试加载的项目转储对 docker 实例不可用,因为它的文件系统与主机服务器隔离。您可以使用docker cp 将文件复制到 docker 实例中,然后加载它们,但是这样做会变得很麻烦,而且 docker 容器并不是真正设计为以这种方式使用的。 docker 容器通常只有最少的可用工具,您最终需要安装额外的软件才能执行这些操作。然后它就变成了一个非标准的容器,不能被替换。

您可能是时候迁移到单独的数据库服务器了,这可以通过使用诸如 mlab 之类的服务来完成,或者您可以创建自己的 droplet 来托管 mongodb 服务器。使用服务为您提供工具,您可以使用 Web 控制面板轻松获取备份副本、将一个数据库复制到另一个数据库、恢复备份等。更容易做到。

【讨论】:

  • 我确实考虑过使用 mlab 或类似的,因为我相信它会更容易。我不介意额外的费用,但使用数据库作为服务会不会更慢?抱歉,我知道这是一个单独的问题,但是由于请求将从服务器发送到数据库(可能是非常不同的地理位置),这不会影响页面加载速度吗?
  • 如果您可以将数据库服务器放在类似的位置,它可以正常工作。同一台机器上的本地提供了良好的性能,但可能无法很好地扩展,因为 db 和流星都在同一台服务器上。 mlab 没有所有位置,所以也许 compose.io 或 mongodb atlas 可能会更好
  • 使用 sftp 和解压缩将数据库文件加载到我的服务器。当我 ssh 和 ls 时,我可以看到它们在那里。但是,命令 'docker exec -it mongodb mongorestore ' 我收到一个错误:'Failed: mongorestore target'' invalid: stat dbunzip: no such file or directory'。我已经尝试了很多关于文件路径的变体(包括 root、./ 等),但我总是得到同样的错误。
  • 您需要将文件放在mongod进程可以读取它们的位置。这基本上意味着在 docker 容器内的文件系统上。
猜你喜欢
  • 2019-08-13
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 2018-07-23
  • 1970-01-01
  • 2022-08-23
  • 1970-01-01
相关资源
最近更新 更多