是否可以从WAL两次还原数据库?

问题描述 投票:0回答:1

我有一个主数据库服务器,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上有两个目录:basebackuppg_walbasebackup包含baseglobalpg_logicalpg_multixactpg_xactPG_VERSIONbackup_label文件。

第一次恢复时,请执行以下操作:

  1. 停止postgres

  2. aws s3 sync s3://%bucketname%/basebackup ~/10/main

  3. [mkdir ~/10/main中的空目录

  4. recovery.conf.sample复制到~/10/main/recovery.conf

  5. 编辑recovery.conf如上所述

  6. start PostgreSQL

[一段时间后再次执行此操作时,我将执行步骤1、4、5、6,并获得描述的结果。

可能是,我需要以某种方式指定从s3存储桶到要还原的第一个WAL?因为我们之前已经恢复了其中一些。还是根本不可能?

postgresql amazon-s3 backup wal
1个回答
1
投票

您的程序似乎有很多错误:

  • 完整备份不仅包含上面列出的文件和目录,还包含complete数据目录(pg_wal / pg_xlog可以为空)。

  • 第一次恢复后,PostgreSQL将选择一个新的时间轴,重命名backup_labelrecovery.conf并作为常规数据库出现。

    您无法继续恢复这样的数据库。我不知道您究竟要怎么做才能再次进入恢复模式,但是您一定已经损坏了某些东西。

一旦数据库完成恢复,唯一进一步恢复的方法就是再次恢复初始备份并从头开始恢复。

您是否考虑过将时间点恢复与recovery_target_action = 'pause'一起使用?然后,PostgreSQL将保持恢复模式,您可以对数据库运行查询。要继续恢复,请定义新的恢复目标并重新启动服务器。

© www.soinside.com 2019 - 2024. All rights reserved.