You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pgBackRest恢复PostgreSQL后数据库无法启动求助

问题描述
  • 数据库服务器每日夜间通过pgBackRest执行备份
  • 在另一台服务器测试恢复,执行命令:pgbackrest --stanza=data --delta --log-level-console=detail restore,恢复操作成功
    恢复命令执行成功
  • 启动数据库时失败
    数据库启动错误
  • 具体启动日志:
<2023-06-25 16:07:31.606 EAT::@:[988027]:>LOG:  从归档恢复日志文件 "00000002.history"
<2023-06-25 16:07:31.614 EAT::@:[988027]:>LOG:  开始基于时间点的恢复,目标时间为2023-06-23 01:21:00+03
<2023-06-25 16:07:31.621 EAT::@:[988027]:>LOG:  从归档恢复日志文件 "00000002.history"
<2023-06-25 16:07:31.744 EAT::@:[988027]:>LOG:  从归档恢复日志文件 "00000001000018340000007D"
<2023-06-25 16:07:31.825 EAT::@:[988027]:>FATAL:  请求的时间线2不是当前服务器历史的子时间线
<2023-06-25 16:07:31.825 EAT::@:[988027]:>DETAIL:  最新检查点位于时间线1的1835/40F14C88,但在请求的时间线历史中,服务器是在时间线1的103/A6FFFFE0处分支出来的。
解决方法

错误原因是恢复时指定的时间线(timeline 2)与备份所属时间线(timeline 1)不匹配,且目标时间线并非当前备份时间线的分支。

  1. 确认备份时间线
    执行以下命令查看备份元数据,确认目标备份的时间线:
pgbackrest info --stanza=data

检查输出中对应备份的timeline字段,确认是否为timeline 1。

  1. 指定正确时间线恢复
    若只需恢复到备份所在的timeline 1,重新执行恢复命令并指定时间线参数:
pgbackrest --stanza=data --delta --log-level-console=detail --target-timeline=1 restore
  1. 若需恢复到timeline 2的时间点
    如果确实要恢复到2023-06-23 01:21:00+03这个timeline 2的时间点,需使用timeline 2分支点(103/A6FFFFE0)之后的备份,或直接使用timeline 2的备份进行恢复。

  2. 清理残留文件(可选)
    若之前的恢复残留了错误的时间线文件,先清理数据库数据目录再重新恢复:

rm -rf /var/lib/postgresql/15/main/*  # 替换为你的数据库数据目录路径

内容的提问来源于stack exchange,提问作者Deo Felix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 18:13:31