我正在尝试使用WAL_ARCHIVE进程执行时间点恢复。archive命令被添加到postgresql.conf文件中,我可以看到WAL被归档在备份归档目录中。当我尝试启动服务时,我会得到PANIC: could not locate a valid checkpoint record
我正在使用以下分步过程。
- 基于api的低级别备份
SELECT pg_start_backup('label', true, false);
- 复制集群的数据目录
tar -zcvpf basebkPostgres20230110New.tgz /PostgreSQL/13/data
- 关闭我的基本备份
SELECT * FROM pg_stop_backup(false, true);
- 正在停止postgres服务
- 正在删除当前的群集数据目录
- 恢复备份的数据目录
- 删除pg_wal目录的内容
- 在postgresql.conf文件中设置restore_command
- 启动postgres服务
您忘记了backup_label
文件和recovery.signal
。您必须捕获pg_stop_backup
(或v15上的pg_backup_stop
)的结果,并根据内容创建backup_label
。该文件必须位于还原的数据目录中。此外,您必须在数据目录中创建recovery.signal
,以便PostgreSQL以归档恢复模式启动并读取您的restore_command
。
在没有restore_command
的情况下,PostgreSQL使用pg_wal
中的WAL,它是空的。如果没有backup_label
,PostgreSQL认为它可以从控制文件pg_control
指示的检查点恢复。即使这样做有效,结果也会导致数据库损坏,因为您必须从备份开始就进行恢复。
此处记录recovery.signal
(步骤7),此处记录backup_label
(步骤4)。