恢复PostgreSQL 15.5(Ubuntu Linux)后时间线未变更的原因排查
问题背景
配置参数:
wal_level = logical archive_mode = on # enables archiving; off, on, or always archive_command = 'test ! -f /home/15arc/%f && cp %p /home/15arc/%f' # command to use to archive a logfile segment
执行备份操作:
./pg_basebackup -D /home/backup -Ft -p 5415 -P -U postgres
恢复操作流程:
- 删除PostgreSQL集群数据目录
/home/postgres15下的所有数据 - 将备份生成的tar文件解压到该目录
- 启动数据库:
./pg_ctl -D /home/postgres15 start
启动后未生成时间线历史文件,原因是什么?
原因分析
时间线历史文件(如00000002.history这类命名的文件)只有在数据库发生时间线切换时才会自动生成,你的操作流程并没有触发时间线切换的场景:
pg_basebackup生成的是集群的一致性基础备份,备份中包含了当前集群的时间线ID及所有必要元数据- 直接将备份解压到原数据目录启动时,数据库会沿用备份时的时间线ID正常启动,没有触发时间线切换的需求
只有当以下场景发生时,才会生成时间线历史文件:
- 原集群曾经历崩溃恢复,且恢复过程中创建了新的时间线(比如原集群崩溃后,未完成WAL归档就启动,会推进时间线)
- 恢复备份后使用
pg_resetwal工具修改了时间线ID - 恢复过程中通过
recovery_target_timeline参数指定了不同于备份的目标时间线 - 备份本身来自已发生时间线切换的集群,且恢复时需要处理时间线分支
你的操作是标准的基础备份恢复流程,没有触发时间线切换,所以不会生成新的时间线历史文件,这是完全正常的行为。
内容的提问来源于stack exchange,提问作者Эльфия Валиева
相关产品推荐
相关产品推荐

