KingbaseES 名词解释之timeline

发布时间 2023-09-19 18:42:00作者: KINGBASE研究院

timeline定义

每当归档文件恢复完成后,创建一个新的时间线用来区别新生成的WAL记录。WAL文件名由时间线和日志序号组成

引入timeline的意义

为了理解引入时间线的背景,我们来分析一下,如果没有时间线,会有什么问题?先举个将数据库恢复到以前时间点的例子。假设在一个数据库的运行过程中,DBA在周三12:00AM删掉了一个关键的表,但是直到周五中午才发现这个问题。这个时候DBA拿出最初的数据库备份,加上存在归档目录的日志文件,将数据库恢复到周三11:00AM的时间点,这样就能正常启动和运行。但是,DBA后来意识到这样恢复是不对的,想恢复到周四8:00AM的数据。这时会发现无法做到:因为在数据库不断运行中,会产生与旧的WAL文件重名的文件,这些文件进入归档目录时,会覆盖原来的旧日志,导致恢复数据库需要的WAL文件丢失。为了避免这种情况,需要区分原始数据库历史生成的WAL文件和完成恢复之后继续运行产生的(重名的)新WAL文件。

为了解决这个问题 引入了timeline,来区分不同版本的wal日志文件。

timeline变更条件

即时恢复(PITR)
配置recovery.conf文件:restore_command = 'cp /mnt/server/archivedir/%f %p' //从归档目录恢复日志 recovery_target_time = '2015-7-16 12:00:00 ' //指定归档时间点,如没指定恢复到故障前的最后一完成的事务

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

切换发生后会在wal日志目录下存在一个histroy文件 比如:/data/V8cluster/sys_wal/00000003.history

其中3就代表了新的时间线的ID

timeline作用

首先时间线的出现就是为了解决不同版本wal日志有可能备覆盖问题,通过时间线可以保留旧版本的wal日志,让备份恢复更加灵活。

recovery.conf指定目标时间线tli进行恢复时,程序首先寻找.history文件,根据.history文件里面记录的时间线分支关系,找到从control里面时间线到目标时间线之间对应的日志文件,再进行恢复

总结

timeline机制能够方便地实现数据库恢复到任意时间点,这对我们数据库备份有重要的作用。我们可以在数据库的使用中合理地备份和归档我们的数据,一旦数据出现丢失或损坏,我们都能有条不紊的使用timeline机制恢复出来我们需要的数据。