如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5

Posted

技术标签:

【中文标题】如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5【英文标题】:How do I copy a Postgres database from one Elastic Beanstalk environment to another? I'm using Rails 5 【发布时间】:2018-01-25 18:33:06 【问题描述】:

我有一对 Elastic Beanstalk 环境,称为“开发”和“生产”。我想将数据从“生产”环境复制到“开发”环境,以便有合理的数据进行测试和使用。

每个环境都在运行一个 Rails 5 项目(具有几乎相同的代码库)并有一个“关联”的 RDS 实例。

我已尝试查看 AWS 控制台,但只能找到从同一数据库上的快照恢复的选项。 (我很容易遗漏一些东西,控制台很复杂。)

我还尝试在 Web 服务器实例上更新 Postgres 工具(至 9.6),以便可以使用 pg_dump 和 pg_restore。但是,操作失败,因为有两个当前连接(在这种情况下我尝试了rake db:drop,但我认为使用 psql 的更直接的方法会产生同样的问题)。

是否有其他方法可以复制数据库,或者我可以安全地终止连接以执行恢复?如果有,怎么做?

【问题讨论】:

【参考方案1】:

我只能找到从同一快照中恢复的选项 数据库

您误解了 RDS 中恢复的工作方式。当您恢复快照时,它始终会从快照创建一个全新的 RDS 实例。要执行您要求的操作,您将首先创建要复制的数据库的 RDS 快照,然后还原该快照,这将创建一个新的 RDS 实例。然后将您的 EB 环境指向新的 RDS 实例。最后删除不再使用的旧 RDS 实例。

【讨论】:

很好的解释!谢谢你。 :) 我认为是“恢复到某个时间点”菜单项让我认为数据库实例将就地“恢复”。我现在可以看到该选项创建了一个新实例。这看起来很有希望......不过,我可能需要做更多的配置,因为目前 RDS 实例是通过 EB 控制台设置的,因此是自动配置的。我猜想通过这个过程需要设置额外的用户权限、环境变量等。

以上是关于如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5

如何从 Postgres 9.4 中转储大对象数据,然后将其导入 Postgres8.x?

如何从公共服务器 postgres 数据库将数据源加载到网关?

我应该如何使用 pgAdmin 3 将数据从 CSV 导入 Postgres 表?

如何使用复制命令在 postgres 中将数据从一个表复制到另一个表

如何将数据从 Postgres 移动到在 Amazon 的 RDS 上运行的 MySQL?