У меня есть основной сервер базы данных, который периодически архивируется на s3. Таким образом, s3 имеет «снимок» базы данных со всеми соответствующими последними WAL. У меня есть другой (локальный) сервер базы данных, который я хочу периодически обновлять, чтобы он соответствовал состоянию основного сервера базы данных. Поэтому я однажды скопировал «главный» каталог из s3 и применил все WAL из s3 с помощью restore.conf. Единственное, что я изменил в этом файле:
restore_command = 'aws s3 cp s3://%bucketName%/database/pg_wal/%f %p'
Это было успешно. Через некоторое время я хочу применить все последние WALs от s3, чтобы быть «более синхронизированными» с основным сервером базы данных. Можно ли это как-то сделать? Я точно знаю, что я не делал никаких обновлений или записей на моем "скопированном" сервере базы данных. Когда я пытаюсь сделать это точно так же, как и раньше , я получаю следующие ошибки (от 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
.
При первом восстановлении я делаюследующие:
Stop postgres
aws s3 sync s3://%bucketname%/basebackup ~/10/main
mkdir
пустые каталоги в ~/10/main
скопировано recovery.conf.sample
в ~/10/main/recovery.conf
изменить recovery.conf
как указано выше
start PostgreSQL
Когда я делаю это снова через некоторое время, я делаю шаги 1, 4, 5, 6 и получаю описанный результат.
Возможно, мне нужно как-то указать первый WAL из корзины s3 для восстановления? Потому что мы уже восстановили некоторые из них раньше. Или это вообще невозможно?