PostgreSQL时间线(timeline)和History File

举报
snowofsummer 发表于 2021/10/13 09:46:11 2021/10/13
【摘要】 PostgreSQL 时间线:每当我们在数据库中完成一个事务时,所做的操作都会记录到$PGDATA/pg_wal目录下的wal日志文件中。wal日志文件一般都是下面这种格式:当一个wal日志被写满后,便会创建新的wal日志000000010000000000000002,以此类推。该文件中前8位,即:00000001表示的便是数据库的时间线。从控制文件中也可以看到:[root@VM-16-1...

PostgreSQL 时间线:

每当我们在数据库中完成一个事务时,所做的操作都会记录到$PGDATA/pg_wal目录下的wal日志文件中。

wal日志文件一般都是下面这种格式:


当一个wal日志被写满后,便会创建新的wal日志000000010000000000000002,以此类推。

该文件中前8位,即:00000001表示的便是数据库的时间线。

从控制文件中也可以看到:

[root@VM-16-10-centos pg_wal]# pg_controldata -D /data/db01/|grep Time
Latest checkpoint's TimeLineID:       1
Latest checkpoint's PrevTimeLineID:   1
Time of latest checkpoint:            Wed 13 Oct 2021 09:28:15 AM CST

每当我们进行基于时间点的还原后,时间线便会加1,并创建一个名为NewTimelineID.history的新文件

recovery_target_timeline是一个参数,它可以帮助我们将集群带入历史记录中的任何时间线,只要有效的基本备份和所有存档日志都到位。

数据库状态1:

执行数据库不完全恢复到 0/07000060:

还原之后,数据库切换到了新的时间线。

除此之外还有哪些改变呢?

恢复结束是指数据库打开进行写入的点。

创建了新的时间线的 history file文件,如00000002.history。

前一个时间线上的部分WAL文件已被新时间线的ID复制。

检查点记录写在新的时间线上。

执行数据库不完全恢复到00000002000000000000000D:

在postgresql.conf文件中添加:
recovery_target_timeline = '2'
recovery_target_lsn = '0/0C000060'


select * from timeline;
 tid | remarks
-----+-------------------------------
 1 | This is timeline id 1
 2 | This is timeline id 2 correct


history file这个文件中记录的就是这个时间线是从哪个WAL位置开始生成的。














【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。