当我们拥有大型数据库时,迁移到另一台服务器并不容易。我们想将 Linode 中的数据库迁移到 Amazon RDS 数据库,我尝试过,pg_dump
并且pg_restore
成功了,但这耗费了大量时间。
我的问题是:有没有像压缩这样的快速方法,或者我可以将 linode 中的数据库与 Amazon RDS 中的数据库同步
所以我只需要将 CNAME 更改为引用亚马逊,然后它就会继续工作,因为我们已经将数据库同步在一起了?
任何建议都会有帮助!
答案1
如果您要迁移到另一个真实主机(而不是 RDS),则可以使用流复制来执行您想要的操作:
pg_basebackup
将数据库迁移到新主机- 启动副本并
recovery.conf
指向当前主服务器 - 让复制赶上来
- 重新加载主服务器并为副本服务器启用同步复制
- ...然后关闭主服务器,将副本服务器重新启动为主服务器,然后开始。
这不适用于 RDS,因为 RDS 不允许您访问底层服务器。您无法使用pg_basebackup
或控制自己的流式复制。因此,如果您使用 RDS,您唯一真正的选择就是转储并重新加载。
理论上,Amazon 可以允许用户设置不在 RDS 中的主服务器的 RDS 副本,然后将其提升为主服务器。这将是一个非常好的主意,因为它可以让人们更轻松地将数据库迁移到 RDS。不过,在撰写本文时,它还没有这种能力,而且这样做可能会很复杂,因为它只有在原始数据库使用兼容选项、相同的主版本和与副本服务器相同的 CPU 架构进行编译时才有效。例如,您无法在 x86 和 x64 之间复制。它还会阻止 Amazon 自由修改他们的 PostgreSQL 以满足他们的需求。
反过来也一样。你不能迁移从RDS 使用流式复制。因此,如果您在 RDS 中有一个大型、繁忙的数据库,那么在没有大量停机时间的情况下将其恢复将非常困难。
坦白说,如果你已经在运行自己的数据库,我看不出 RDS 有什么吸引力。它很贵,而且剥夺了你对数据的大部分控制权。(不过请注意,我在另一家从事 PostgreSQL 服务的公司工作,所以我的意见需要考虑这一点)。
你可能能够使用第三方复制解决方案(如 Londiste、Bucardo 或 Slony-I)将数据库复制到 RDS。我还没有在 RDS 上尝试过这些工具,并且怀疑它们无法工作,因为需要安装扩展、运行代码守护程序等。您可能能够使用 EC2 节点执行此操作,但操作起来会很复杂且棘手。