PostgreSQL pg_rewind实例--could
admin
2023-01-27 17:44:05
0

一、介绍

作为pg_rewind报错章节补充一个用例,说明其用法。

二、实例

1、history文件

--新主
$ cat 00000004.history
1    0/140000C8    no recovery target specified
2    0/19000060    no recovery target specified
3    0/1F000090    no recovery target specified

--老主
$ cat 00000003.history
1    0/140000C8    no recovery target specified
2    0/19000060    no recovery target specified

2、查找分叉点
PostgreSQL pg_rewind实例--could
说明:findCommonAncestorTimeline:
  1)比较sourceHistory[0]、targetHistory[0]的时间线和begin的值,可以得出两者相等,则转到第2个条目的比较
  2)比较sourceHistory[1]、targetHistory[1]的时间线和begin的值,可以得出两者相等,则转到第3个条目的比较
  3)比较sourceHistory[2]、targetHistory[2]的时间线和begin的值,可以得出两者相等,此时比较结束
  4)取第3个条目进行返回:MinXLogRecPtr(sourceHistory[i].end, targetHistory[i].end),此时返回的是sourceHistory[i].end的值作为分叉点,即 0/1F000090

3、此时ControlFile_target.checkPoint < divergerec && target的chkptendrec!=divergerec,所以可以进行pg_rewind

4、findLastCheckpoint查找分叉点divergerec之前最近的checkpoint作为rewind起点。
  1)首先需要定位到分叉点divergerec开始的记录,然后根据该记录的xl_prev指针定位前一个wal记录
  2)判断第1)步得到的wal记录是否是checkpoint,如果不是则重新返回到第1),直到找到checkpoint点
  3)这里就有个问题,如果得到的分叉点正好是老主结束位置,即本例:1F000090为分叉点,实际上是老主和新主没有发生数据分叉,可以认为是没有作为备没有接收完新主数据呢
  4)target从1F000090这个位置开始获取prev指针向前找checkpoint时,因为这个位置后都是0了,所以不能继续向下遍历找了,报错:could not find previous WAL record at %X/%X

三、小结

这里pg_rewind执行时,判断不出来没有分叉的情景,即本文的场景。此时执行pg_rewind会报错,让用户还以为WAL文件由损坏导致执行pg_rewind失败。这个工具如果能够将这种场景识别出来,报不需要rewind是不是更好?

四、pg_rewind原理及报错流程分析参考

https://blog.51cto.com/yanzongshuai/2368285
https://blog.51cto.com/yanzongshuai/2334303

相关内容

热门资讯

终于懂了“先锋大厅.有挂吗?”... 您好:先锋大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这款游戏...
【第一消息】“牛魔王牛牛.到底... 家人们!今天小编来为大家解答牛魔王牛牛透视挂怎么安装这个问题咨询软件客服徽9784099的挂在哪里买...
【今日要闻】“人人互娱.怎么装... 网上科普关于“人人互娱有没有挂”话题很是火热,小编也是针对人人互娱作*弊开挂的方法以及开挂对应的知识...
玩家最新攻略“六六顺牛牛.辅助... 有 亲,根据资深记者爆料六六顺牛牛是可以开挂的,确实有挂(咨询软件无需打...
终于了解“开心游戏.到底有挂吗... 网上科普关于“开心游戏有没有挂”话题很是火热,小编也是针对开心游戏作*弊开挂的方法以及开挂对应的知识...
我来教教您“新玉海楼茶苑.可以... 网上科普关于“新玉海楼茶苑有没有挂”话题很是火热,小编也是针对新玉海楼茶苑作*弊开挂的方法以及开挂对...
玩家分享攻略“天天快来麻将.怎... 网上科普关于“天天快来麻将有没有挂”话题很是火热,小编也是针对天天快来麻将作*弊开挂的方法以及开挂对...
今日重大通报“鸿运会十三张.可... 家人们!今天小编来为大家解答鸿运会十三张透视挂怎么安装这个问题咨询软件客服徽4282891的挂在哪里...
今日重大发现“欢乐斗地主掼蛋.... 您好:欢乐斗地主掼蛋这款游戏可以开挂,确实是有挂的,需要了解加客服微信【4282891】很多玩家在这...
今日重大消息“牛魔王炸金花.开... 今日重大消息“牛魔王炸金花.开挂神器?”外卦神器下载您好,牛魔王炸金花这个游戏其实有挂的,确实是有挂...