PostgreSQL问题分析1:时间线不一致
admin
2023-02-09 03:20:02
0

一、问题:requested timeline %u does not contain minimum recovery point %X/%X on timeline %u

该日志在代码中的位置如下:

StartupXLOG:
    if (!XLogRecPtrIsInvalid(ControlFile->minRecoveryPoint) &&
        tliOfPointInHistory(ControlFile->minRecoveryPoint - 1, expectedTLEs) !=
        ControlFile->minRecoveryPointTLI)
        ereport(FATAL,
                (errmsg("requested timeline %u does not contain minimum recovery point %X/%X on timeline %u",
                        recoveryTargetTLI,
                        (uint32) (ControlFile->minRecoveryPoint >> 32),
                        (uint32) ControlFile->minRecoveryPoint,
                        ControlFile->minRecoveryPointTLI)));

二、分析

recoveryTargetTLI这个值是什么呢?

1、改值在启动恢复过程中变化如下:

StartupXLOG:
    ...
    if (ControlFile->minRecoveryPointTLI > ControlFile->checkPointCopy.ThisTimeLineID)
        recoveryTargetTLI = ControlFile->minRecoveryPointTLI;
    else
        recoveryTargetTLI = ControlFile->checkPointCopy.ThisTimeLineID;
    readRecoveryCommandFile();
    |-- for (item = head; item; item = item->next){
    |       ...
    |       else if (strcmp(item->name, "recovery_target_timeline") == 0){
    |           rtliGiven = true;
    |           if (strcmp(item->value, "latest") == 0)
    |               rtli = 0;
    |           else
    |               rtli = (TimeLineID) strtoul(item->value, NULL, 0);
    |       }
    |       ...
    |   }
    |   ...
    |   if (rtliGiven){
    |       if (rtli){
    |           recoveryTargetTLI = rtli;
    |           recoveryTargetIsLatest = false;
    |       }else{
    |           recoveryTargetTLI = findNewestTimeLine(recoveryTargetTLI);
    |           recoveryTargetIsLatest = true;
    |       }
    |-- }

首先,pg_control文件记录的最小恢复点时间线ControlFile->minRecoveryPointTLI会和pg_control文件记录的checkpoint的的时间线 ControlFile->checkPointCopy.ThisTimeLineID比较,recoveryTargetTLI取两者之间较大值。

然后readRecoveryCommandFile会读取recovery.cnf文件,如果是主机则没有recovery.cnf文件。recovery.cnf文件中recovery_target_timeline的值指定恢复到的时间线,如果是latest则时间线rtli为0否则为其指定值;如果rtli是指定值,则recoveryTargetTLI为指定值,否则从第一步获取的recoveryTargetTLI值+1开始,看是否有其对于的history文件,找到最大时间线对于的history文件,recoveryTargetTLI为该时间线。

相关内容

热门资讯

今日重磅消息“约战丹东麻将怎么... 家人们!今天小编来为大家解答约战丹东麻将透视挂怎么安装这个问题咨询软件客服徽9752949的挂在哪里...
今日重大通报“先锋炸/金/花开... 网上科普关于“先锋炸/金/花有没有挂”话题很是火热,小编也是针对先锋炸/金/花作*弊开挂的方法以及开...
【第一资讯】“新青鸟大厅拼三张... 【第一资讯】“新青鸟大厅拼三张是不是有挂?”(详细开挂教程)您好,新青鸟大厅拼三张这个游戏其实有挂的...
终于了解“白金岛字牌集辅助器?... 终于了解“白金岛字牌集辅助器?”(详细开挂教程)您好,白金岛字牌集这个游戏其实有挂的,确实是有挂的,...
今日重磅消息“天府棋牌到底有挂... 有 亲,根据资深记者爆料天府棋牌是可以开挂的,确实有挂(咨询软件无需打开...
【第一财经】“元来黄冈麻将到底... 您好:元来黄冈麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款...
【今日要闻】“微信十三水开挂器... 家人们!今天小编来为大家解答微信十三水透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里买...
广州一马拉松赛发布“手铐型”奖... 12月24日,网传广州黄埔马拉松发布“手铐型”的完赛奖牌。网传图片显示,奖牌为双环可转动设计,呈现为...
我来教教您“兴动竞赛开挂神器?... 我来教教您“兴动竞赛开挂神器?”(其实是有挂)您好,兴动竞赛这个游戏其实有挂的,确实是有挂的,需要了...
英伟达机器人总监盛赞特斯拉FS... 电车界12月25日消息 据teslarati报道,英伟达机器人总监Jim Fan高度评价了特斯拉FS...