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 location
和 Latest 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/DE003400
到 1C42/4CC934E0
,都在 TimeLineID
2
.
对应于 WAL 段 0000000200001C41000000DE
到 0000000200001C42????????
。
我要从备用服务器进行备份。我使用以下命令创建二进制备份:
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 location
和 Latest 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/DE003400
到 1C42/4CC934E0
,都在 TimeLineID
2
.
对应于 WAL 段 0000000200001C41000000DE
到 0000000200001C42????????
。