PostgreSQL 在什么时候开始恢复

At what point PostgreSQL begin recovery

我要从备用服务器进行备份。我使用以下命令创建二进制备份:

psql -c 'select pg_xlog_replay_pause()'
tar c data --exclude=pg_xlog/* | lzop --fast > /mnt/nfs/backup/xxxx.tar.lzop
psql -c 'select pg_xlog_replay_resume()'

master 数据库中的所有 WAL 日志都在外部存储中存储了几天,使用这些日志进行恢复效果很好。但是清理日志后,备份就失效了。解决方案是从某个点开始复制所有需要的 WAL 日志,直到备份完成后的最后一个日志。

问题是第一个文件是什么?

pg_controldata 显示:

pg_control version number:            942
Catalog version number:               201409291
Database system identifier:           6185091942558520564
Database cluster state:               in archive recovery
pg_control last modified:             Thu 08 Oct 2015 03:14:23 PM UTC
Latest checkpoint location:           1C41/F662E1F8
Prior checkpoint location:            1C41/B4435EE8
Latest checkpoint's REDO location:    1C41/DE003400
Latest checkpoint's REDO WAL file:    0000000200001C41000000DE
Latest checkpoint's TimeLineID:       2
Latest checkpoint's PrevTimeLineID:   2
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID:          0/3550951620
Latest checkpoint's NextOID:          83806
Latest checkpoint's NextMultiXactId:  1
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        3152230057
Latest checkpoint's oldestXID's DB:   16385
Latest checkpoint's oldestActiveXID:  3550951620
Latest checkpoint's oldestMultiXid:   1
Latest checkpoint's oldestMulti's DB: 16385
Time of latest checkpoint:            Thu 08 Oct 2015 03:10:44 PM UTC
Fake LSN counter for unlogged rels:   0/1
Minimum recovery ending location:     1C42/4CC934E0

那么第一个文件是什么? AFAIK PostgreSQL 总是从检查点开始恢复。我尝试恢复多个备份并注意到 PostgreSQL 从 Prior checkpoint location 开始恢复。这总是真的吗? Prior checkpoint locationLatest checkpoint location 有什么区别?

根据pg_controldata:

First file: 1C41/B4
Minimum last file: 1C42/4C (Must be greater of equal to `Minimum recovery ending location`)

我说得对吗?

您需要从 "last checkpoint's redo location" - 用 "last checkpoint's REDO WAL file" 标识的第一个 WAL - 到时间轴 "Last checkpoint's TimeLineID" 上包含 "minimum recovery ending location" 的 WAL 段。

在您的示例中,从 LSN 1C41/DE0034001C42/4CC934E0,都在 TimeLineID 2.

对应于 WAL 段 0000000200001C41000000DE0000000200001C42????????