【发布时间】:2019-10-10 08:07:27
【问题描述】:
我有一个主数据库服务器,WAL 定期存档在 s3 上。所以 s3 有一个包含所有相应最新 WAL 的数据库的“快照”。 我有另一个(本地)数据库服务器,我想定期 更新为主数据库服务器的实际状态。 所以我曾经从 s3 复制“主”目录并使用 restore.conf 从 s3 应用所有 WAL 我在这个文件中唯一改变的是:
restore_command = 'aws s3 cp s3://%bucketName%/database/pg_wal/%f %p'
成功了。 一段时间后,我想将 s3 中的所有最新 WAL 应用到与主数据库服务器“更加同步”。 有没有可能以某种方式做到这一点?我很清楚,我没有对我的“复制”数据库服务器进行任何更新或写入。当我尝试以 与以前完全相同的方式进行操作时,我收到了下一个错误(来自 stderr):
fatal error: An error occurred (404) when calling the HeadObject
operation: Key "database/pg_wal/00000001000001EF0000001F" does not
exist
fatal error: An error occurred (404) when calling the HeadObject
operation: Key "database/pg_wal/00000002.history" does not exist
fatal error: An error occurred (404) when calling the HeadObject
operation: Key "database/pg_wal/00000001.history" does not exist
fatal error: An error occurred (403) when calling the HeadObject
operation: Forbidden
fatal error: An error occurred (403) when calling the HeadObject
operation: Forbidden
fatal error: An error occurred (403) when calling the HeadObject
operation: Forbidden
fatal error: An error occurred (403) when calling the HeadObject
operation: Forbidden
fatal error: An error occurred (403) when calling the HeadObject
operation: Forbidden
这是对我的程序的更详细描述:
我在 s3 上有两个目录:basebackup 和 pg_wal。 basebackup 包含 base、global、pg_logical、pg_multixact、pg_xact、PG_VERSION、backup_label 文件。
当我第一次恢复它时,我会执行以下操作:
停止 postgres
aws s3 sync s3://%bucketname%/basebackup ~/10/mainmkdir~/10/main中的空目录将
recovery.conf.sample复制到~/10/main/recovery.conf如上编辑
recovery.conf启动 PostgreSQL
当我在一段时间后再次这样做时,我正在执行步骤 1、4、5、6 并获得描述的结果。
可能,我需要以某种方式指定从 s3 存储桶恢复的第一个 WAL?因为我们之前已经恢复了其中的一些。还是根本不可能?
【问题讨论】:
-
好的,这意味着在第一次恢复之后,备份作为一个独立的数据库出现了。然后你不能继续恢复它。所以关于你如何让它再次尝试恢复存在一些谜团。你能解释一下吗?
-
@LaurenzAlbe。我的意思是,我的数据库和原始数据库之间的区别只是几个 WAL 文件,我想从 s3 中恢复。考虑到我的数据库自第一次恢复以来根本没有改变,这是不可能的吗?
-
我明白了。缺少的链接是您如何让数据库在步骤 6 之后再次恢复(并失败)。这是不可能的,因为
backup_label和recovery.conf将被重命名。
标签: postgresql amazon-s3 backup wal