以最少的停机时间将heroku数据库迁移到Amazon RDS


15

我有一个heroku postgres数据库,并想将其迁移到Amazon RDS以节省成本。有什么办法可以减少停机时间?通常,这涉及实时复制数据库,然后将复制的DB升级为主数据库。

我知道我可以使用跟随者数据库在heroku中迁移数据库,也可以使用只读副本数据库在Amazon RDS中迁移数据库。是否有类似的方法来创建位于我自己的Amazon RDS中的heroku DB的数据库复制?


2
复制完所有内容后,您可以在RDS中创建一个从属服务器,将heroku主服务器升级为RDS成为主服务器。
2014年

2
@SamD我还不认为Amazon支持从外部数据库接收的PostgreSQL从属。他们补充了吗?我在docs.aws.amazon.com/AmazonRDS/latest/UserGuide/…中看不到它。如果它被添加,一个文档的链接将大大赞赏。您是pg_basebackup如何开始的呢?并处理不同的主要版本?
Craig Ringer 2014年

Answers:


3

可以肯定的是,您将必须在这里执行良好的老式转储和还原。除了在转储中加载外,Amazon似乎没有提供其他任何导入选项:

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/PostgreSQL.Procedural.Importing.html

即使这样做,AFAICT Heroku提供的唯一导出选项是pg_dumps(即不是basebackups或设置外部热备用节点的能力):

https://devcenter.heroku.com/articles/heroku-postgres-import-export

如果幸运的话,您将使用足够新的Postgres版本来支持并行化的pg_dump(9.3+)和并行化的pg_restore(8.4+),这将使您的工作更快一些。希望您能负担得起一个维护窗口,在此期间,您可以在切换进行期间锁定对站点的写入操作...


1

您可以将当前应用程序连接到RDS数据库,然后将其插入到Heroku和RDS中,这并不是要设置复制,而只是要插入两个服务器中。

设置完成后,您将在两个数据库中存储新记录。

通过读取RDS数据库中的第一行,可以很容易地看到缺少的记录(例如:在表1中,所有ID为100或更低的记录都将丢失)。除非您有很多表,否则编写一个简单的导出脚本应该不会太困难。

希望能帮助到你


1

看起来AWS DMS(数据库迁移服务)支持从外部SQL实例迁移数据。我能够设置一个迁移任务,该任务复制数据并将更改从Heroku复制到RDS。它是否真的对我有用,还有待观察;)

-编辑-

看起来像DMS之类的服务无法与Heroku一起使用,因为它们需要比Heroku在其数据库上允许的角色更多的特权角色:https : //help.heroku.com/E10ZZ6IJ/why-can-ti-use-third-party-tools将我的Heroku Postgres数据库复制到一个非Heroku数据库

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.