我们最近将数据库集群从自托管迁移到 Digital Ocean Managed Postgres。我们想将整个数据库回滚到最近的某个时间点。
备份最多可保存一周
根据文档我们不能直接从备份中恢复数据库:
当您从备份中恢复时,我们会创建集群主节点的新副本。您无法直接恢复到主节点本身,因为这会为数据库创建替代时间线,从而给托管服务带来不必要的复杂性。通过恢复到新的主节点,可以保留单个线性时间线历史记录。
当新的集群恢复时,它是一个并行集群(见下图),似乎没有任何方法可以让它假设原始集群的连接参数。
我们看到的唯一解决方法是从新的并行集群进行完全导出并删除原始数据库并从命令行导入。
这里还有其他选择吗?
答案1
更改每个应用程序的连接参数,使其在新的时间点指向新的数据库实例。
数据库方面最快且复杂性最低。添加转储和恢复可能会大大延长恢复时间。避免同一实例上两个时间点的复杂性和混淆。可以保留旧实例一段时间,以中止恢复。
应用程序方面更加复杂,可能需要配置或重新部署。如果您要切换数据库提供商,这可能并不简单,但应该是可能的。
答案2
最后我恢复到了另一个集群,然后在本地转储数据库并恢复它。这不是最好的解决方案,但我看不到其他选择。
恢复到新集群
按照 DO 用户界面。
导出数据库到本地
pg_dump -d '<DO new cluster connection string>' -Fc > prod_digital_ocean.dmp
重新导入
pg_restore --no-acl --no-owner --clean -d '< DO old cluster connection string>' prod_digital_ocean.dmp