代码之家  ›  专栏  ›  技术社区  ›  YogeshR

PostgreSQL Pitr工作不正常

  •  4
  • YogeshR  · 技术社区  · 6 年前

    我正在尝试将PostgreSQL数据库还原到某个时间点。

    当我只使用 restore_command 在里面 recovery.conf 那它工作正常。

    restore_command = 'cp /var/lib/pgsql/pg_log_archive/%f %p'
    

    当我使用 recovery_target_time parameter ,它没有还原到目标时间。

    restore_command = 'cp /var/lib/pgsql/pg_log_archive/%f %p'
    recovery_target_time='2018-06-05 06:43:00.0'
    

    以下是日志文件内容:

    2018-06-05 07:31:39.166 UTC [22512] LOG:  database system was interrupted; last known up at 2018-06-05 06:35:52 UTC
    2018-06-05 07:31:39.664 UTC [22512] LOG:  starting point-in-time recovery to 2018-06-05 06:43:00+00
    2018-06-05 07:31:39.671 UTC [22512] LOG:  restored log file "00000005.history" from archive
    2018-06-05 07:31:39.769 UTC [22512] LOG:  restored log file "00000005000000020000008F" from archive
    2018-06-05 07:31:39.816 UTC [22512] LOG:  redo starts at 2/8F000028
    2018-06-05 07:31:39.817 UTC [22512] LOG:  consistent recovery state reached at 2/8F000130
    2018-06-05 07:31:39.818 UTC [22510] LOG:  database system is ready to accept read only connections
    2018-06-05 07:31:39.912 UTC [22512] LOG:  restored log file "000000050000000200000090" from archive
    2018-06-05 07:31:39.996 UTC [22512] LOG:  recovery stopping before abort of transaction 9525, time 2018-06-05 06:45:02.088502+00
    2018-06-05 07:31:39.996 UTC [22512] LOG:  recovery has paused
    

    我正在尝试将数据库实例还原到06:43:00。为什么会恢复到06:45:02?

    编辑

    在第一个场景中recovery.conf转换为recovery.done,但在第二个场景中没有发生这种情况

    这可能是什么原因?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Laurenz Albe    6 年前

    你忘了设置

    recovery_target_action = 'promote'
    

    在时间点恢复之后, recovery_target_action 确定PostgreSQL将如何进行。

    默认值为 pause 这意味着postgresql将什么也不做,等待您告诉它如何继续。

    要完成恢复,请连接到数据库并运行

    SELECT pg_wal_replay_resume();
    

    似乎在06:43:00到06:45:02之间没有记录任何数据库活动。注意日志上写着 recovery stopping before abort of transaction 9525 .

    推荐文章