我有一个heroku postgres数据库,并想将其迁移到Amazon RDS以节省成本。有什么办法可以减少停机时间?通常,这涉及实时复制数据库,然后将复制的DB升级为主数据库。
我知道我可以使用跟随者数据库在heroku中迁移数据库,也可以使用只读副本数据库在Amazon RDS中迁移数据库。是否有类似的方法来创建位于我自己的Amazon RDS中的heroku DB的数据库复制?
pg_basebackup
如何开始的呢?并处理不同的主要版本?
我有一个heroku postgres数据库,并想将其迁移到Amazon RDS以节省成本。有什么办法可以减少停机时间?通常,这涉及实时复制数据库,然后将复制的DB升级为主数据库。
我知道我可以使用跟随者数据库在heroku中迁移数据库,也可以使用只读副本数据库在Amazon RDS中迁移数据库。是否有类似的方法来创建位于我自己的Amazon RDS中的heroku DB的数据库复制?
pg_basebackup
如何开始的呢?并处理不同的主要版本?
Answers:
可以肯定的是,您将必须在这里执行良好的老式转储和还原。除了在转储中加载外,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+),这将使您的工作更快一些。希望您能负担得起一个维护窗口,在此期间,您可以在切换进行期间锁定对站点的写入操作...
您可以将当前应用程序连接到RDS数据库,然后将其插入到Heroku和RDS中,这并不是要设置复制,而只是要插入两个服务器中。
设置完成后,您将在两个数据库中存储新记录。
通过读取RDS数据库中的第一行,可以很容易地看到缺少的记录(例如:在表1中,所有ID为100或更低的记录都将丢失)。除非您有很多表,否则编写一个简单的导出脚本应该不会太困难。
希望能帮助到你
看起来AWS DMS(数据库迁移服务)支持从外部SQL实例迁移数据。我能够设置一个迁移任务,该任务复制数据并将更改从Heroku复制到RDS。它是否真的对我有用,还有待观察;)
-编辑-
看起来像DMS之类的服务无法与Heroku一起使用,因为它们需要比Heroku在其数据库上允许的角色更多的特权角色:https : //help.heroku.com/E10ZZ6IJ/why-can-ti-use-third-party-tools将我的Heroku Postgres数据库复制到一个非Heroku数据库