Восстановление PostgreSQL на момент времени не работает

У нас есть 2 сервера PostgreSQL, настроенные как master-slave.

Я хочу проверить сценарий ниже

Я сделал базовую резервную копию на мастере, а затем удалил таблицу и переключил файл xlog с помощью команды select pg_switch_xlog();. Тогда я остановил мастера. Продвинул слейв как мастер и удалил еще одну таблицу и переключил файл журнала.

Теперь я восстановил эту базовую резервную копию и wal-файлы обоих серверов на новом сервере и использовал recovery_target_time для тестирования PITR. Я могу восстановиться до того времени, когда я не удалил ни одной таблицы или не удалил 1 таблицу со старого мастера. Но я не могу восстановиться до момента времени, когда я удалил таблицу из нового мастера.

Ниже приведен вывод журнала для того же

2018-08-06 14:49:39.564 UTC  [19772] LOG:  starting point-in-time recovery to 2018-08-06 14:20:00+00
cp: cannot stat ‘/var/lib/pgsql/pg_log_archive/00000005.history’: No such file or directory
2018-08-06 14:49:39.579 UTC  [19772] LOG:  restored log file "000000050000000200000046" from archive
2018-08-06 14:49:39.630 UTC  [19772] LOG:  redo starts at 2/46000028
2018-08-06 14:49:39.635 UTC  [19772] LOG:  consistent recovery state reached at 2/460ABCE8
2018-08-06 14:49:39.636 UTC  [19770] LOG:  database system is ready to accept read only connections
2018-08-06 14:49:39.648 UTC  [19772] LOG:  restored log file "000000050000000200000047" from archive
2018-08-06 14:49:39.732 UTC  [19772] LOG:  restored log file "000000050000000200000048" from archive
cp: cannot stat ‘/var/lib/pgsql/pg_log_archive/000000050000000200000049’: No such file or directory
2018-08-06 14:49:39.780 UTC  [19772] LOG:  redo done at 2/48003410
2018-08-06 14:49:39.780 UTC  [19772] LOG:  last completed transaction was at log time 2018-08-06 13:27:00.442816+00
2018-08-06 14:49:39.796 UTC  [19772] LOG:  restored log file "000000050000000200000048" from archive
2018-08-06 14:49:39.843 UTC  [19772] LOG:  restored log file "00000006.history" from archive
cp: cannot stat ‘/var/lib/pgsql/pg_log_archive/00000007.history’: No such file or directory
2018-08-06 14:49:39.845 UTC  [19772] LOG:  selected new timeline ID: 7
cp: cannot stat ‘/var/lib/pgsql/pg_log_archive/00000005.history’: No such file or directory
2018-08-06 14:49:39.903 UTC  [19772] LOG:  archive recovery complete
2018-08-06 14:49:40.006 UTC  [19772] LOG:  MultiXact member wraparound protections are now enabled
2018-08-06 14:49:40.008 UTC  [19770] LOG:  database system is ready to accept connections
2018-08-06 14:49:40.009 UTC  [19786] LOG:  autovacuum launcher started

Ниже приведено содержимое файла recovery.conf:

restore_command = 'cp /var/lib/pgsql/pg_log_archive/%f %p'
recovery_target_time = '2018-08-06 14:20:00.0'
recovery_target_inclusive = 'true'
recovery_target_action = 'promote'

Что я здесь делаю неправильно?


person YogeshR    schedule 06.08.2018    source источник


Ответы (1)


Восстановление не переходит к временной шкале 6, потому что вы не добавили

recovery_target_timeline = 'latest'

до recovery.conf. Как указано в документации :

По умолчанию восстановление выполняется по той же временной шкале, которая была текущей на момент создания базовой резервной копии.

person Laurenz Albe    schedule 07.08.2018
comment
На данный момент я использую restore_command,recovery_target_time, recovery_target_inclusive, recovery_target_action в recovery.conf. Теперь я добавляю recovery_target_timeline. идеально ли это сейчас для восстановления на момент времени? - person YogeshR; 07.08.2018
comment
Я должен так сказать. Не могли бы вы отредактировать свой вопрос самостоятельно, чтобы добавить правильную информацию? - person Laurenz Albe; 07.08.2018