postgresql的时间线

参考:http://mysql.taobao.org/monthly/2015/07/03/

https://wiki.postgresql.org/images/e/e5/FOSDEM2013-Timelines.pdf

 

在做即时恢复时,为了能支持恢复到任意时间点,引入了时间线的概念。

每当存档恢复完成时,就会创建一个新的timeline来标识恢复后生成的一系列WAL记录。时间轴ID号是WAL段文件名的一部分,所以新的时间轴不会覆盖以前的时间轴生成的WAL数据。它的作用为了区分因数据库恢复造成的不同时间段的wal日志,以支持dba在出现数据库down机时依据基础备份和wal日志恢复大宕机之前的任意状态。

wal文件的组成:由16进制命名总共24个字符由三部分组成: 时间线ID + LogId+ logSeg

0000000100000001000000C4
00000001 //时间线ID
00000001 //LogId
000000C4 //logSeg

何时会产生新的时间线?

两种情况:

1、即时恢复(PITR) 配置recovery.conf文件,设置好recovery.conf文件后,启动数据库,将会产生新的timeline,而且会生成一个新的history文件。恢复的默认行为是沿着与当前基本备份相同的时间线恢复。如果你想恢复到某些时间线,你需要指定的recovery.conf目标时间线recovery_target_timeline,不能恢复到早于基本备份分支的时间点。

比如:

 restore_command = 'cp /mnt/server/archivedir/%f %p' //从归档目录恢复日志
 recovery_target_time = '2015-7-16 12:00:00 ' //指定归档时间点,如没指定恢复到故障前的最后一完成的事务
 recovery_target_timeline = '00000002.history' //指定归档时间线,’latest’代表最新的时间线分支,如没指定恢复到故障前的pg_control里面的时间线
 standby_mode = ‘off’ //打开后将会以备库身份启动,而不是即时恢复

 

2、主备架构,备库promote为主库时,会切换时间线。

每次创建一个新的时间线,PostgreSQL都会创建一个“时间线历史”文件,文件名类似.history,该文件可能含有多行记录,每个记录的内容格式如下:

<parentTLI> <switchpoint> <reason>
parentTLI:ID of the parent timeline
switchpoint: XLogRecPtr of the WAL position where the switch happened
reason: human-readable explanation of why the timeline was changed

image.png

比如上图的00000002.history:

#cat 00000002.history
1       0/DE0000D8      no recovery target specified

当数据库在从包含多个时间线的归档中进行恢复时,这些history文件帮助系统选取正确的wal文件。当我们在recovery.conf指定目标时间线tli进行恢复时,程序首先寻找.history文件,根据.history文件里面记录的时间线分支关系,找到从pg_control里面的startTLI到tli之间的所有时间线对应的日志文件,再进行恢复。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值