重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛
标题:
PG测试库数据恢复到最新的问题及解决办法
[打印本页]
作者:
mahan
时间:
2026-6-7 23:23
标题:
PG测试库数据恢复到最新的问题及解决办法
重新将一个测试库数据恢复到最新,出现的问题及解决办法
登录/注册后可看大图
228296a258c4a34e74.png
(63.18 KB, 下载次数: 0)
下载附件
2026-6-7 23:20 上传
报错核心是:target timeline 2 forked from backup timeline 1(目标时间线 2 从备份时间线 1 分支出来了,且存在冲突)。
这背后发生了什么?
致命点来了: 因为你的测试库是从正式库原样克隆过来的,它底层的 postgresql.conf 里依然保留着正式库的归档命令(archive_command)。
测试库晋升后,它顺着配置文件,偷偷把属于 Timeline 2 的历史记录推送到了正式环境的 pgBackRest 备份仓库里!
现在你删了目录重新跑 restore,pgBackRest 去仓库里一看:“哟,有最新的 Timeline 2”,于是默认尝试向 Timeline 2 恢复。但是你的备份包是在 Timeline 1 做的,两者对不上,直接报错保护。
解决办法
既然已经重新清空了 data 和 tablespace 目录,现在只需要在恢复命令中加上两个关键参数,就能完美避开这个问题,并且防止它再次发生。
在 postgres 用户下,执行这行修改后的恢复命令:
Bash
pgbackrest --stanza=regcost --target-timeline=1 --archive-mode=off restore
参数原理解释:
--target-timeline=1:明确告诉 pgBackRest,不要管仓库里那个新冒出来的 Timeline 2,强制只使用正式库原来的 Timeline 1 进行恢复(报错信息里明确写了 backup timeline 1)。
--archive-mode=off:这个参数极其关键! 它是专门为了防止“测试库污染正式库”设计的。加上它之后,pgBackRest 会在恢复数据的同时,自动在配置文件里把归档功能关掉。这样等会儿数据库启动后,就不会再往正式库的备份仓库里写脏数据了。
欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/)
Powered by Discuz! X3.2