返回顶部
首页 > 资讯 > 数据库 >PostgreSQL pg_rewind原理
  • 479
分享到

PostgreSQL pg_rewind原理

2024-04-02 19:04:59 479人浏览 薄情痞子
摘要

一、背景常见的高可用架构中,如果master挂了且有数据没有同步到备,高可用系统会提升备为主对外服务。对于老主有可能再以备的身份加入集群时,可能搭建流复制关系失败。可以用pg_rewind工具使主备的数据一

一、背景
常见的高可用架构中,如果master挂了且有数据没有同步到备,高可用系统会提升备为主对外服务。对于老主有可能再以备的身份加入集群时,可能搭建流复制关系失败。可以用pg_rewind工具使主备的数据一致。

二、pg_rewind原理
PostgreSQL pg_rewind原理
三、相关代码

1、每个文件(目录)的差异被记录在结构体 file_entry_t 中,其定义如下
typedef struct file_entry_t
{
    char       *path;
    file_type_t type;
    file_action_t action;

    
    size_t  oldsize;
    size_t  newsize;
    Bool    isrelfile;      
    

    datapagemap_t pagemap;

    
    char       *link_target;

    struct file_entry_t *next;
} file_entry_t;
2、文件类型
typedef enum
{
    FILE_TYPE_REGULAR,//常规文件
    FILE_TYPE_DIRECTORY,//目录
    FILE_TYPE_SYMLINK//软连接
} file_type_t;
3、对应文件的操作action
typedef enum
{
    FILE_ACTION_CREATE,         
    FILE_ACTION_COPY,           
    FILE_ACTION_COPY_TaiL,      
    FILE_ACTION_NONE,           
    FILE_ACTION_TRUNCATE,       
    FILE_ACTION_REMOVE          
} file_action_t;
4、其他变量解读
isrefile 表示该文件是否是一个表数据文件,表数据文件的路径要满足以下几个条件:
isRelDataFile(path):
    global/ 目录下的文件,即数据库共享的表文件目录下的文件
    base/ 目录下的文件,即默认tablespace的表文件目录下的文件
    pg_tblspc/&rnode.spcNode/TABLESPACE_VERSION_DIRECTORY/目录下的文件,即其他tablespace 的表文件目录下的文件,其中PG_9.4_201403261 与版本相关
    文件名符合的格式
pagemap (怎么用?extractPageInfo)存储了一个bitmap,每一位存储了对应的目的集群文件中的每个page 从两个集群的分叉点之后是否发生了变化,1代表发生变化,0代表未变化。
oldsize 代表目的集群该文件的大小,newsize 代表源集群该文件的大小。pg_rewind 中通过源集群和目的集群的对应文件大小比较或者文件(目录)是否存在,指定文件的处理action,例如:
    oldsize > newsize: action=FILE_ACTION_TRUNCATE
    oldsize < newsize: action=FILE_ACTION_COPY_TAIL
    如果文件不存在,则action=FILE_ACTION_COPY,PG_VERSION文件除外
    如果目录不存在,则action=FILE_ACTION_CREATE
    如果文件多余,则action=FILE_ACTION_REMOVE
    以上动作由函数process_target_file和process_source_file一起处理。只在process_target_file设置FILE_ACTION_REMOVE
5、提取wal日志获取更改页的步骤:
extractPageInfo:
    for (block_id = 0; block_id <= record->max_block_id; block_id++){
        if (!XLogRecGetBlockTag(record, block_id, &rnode, &forknum, &blkno))
            continue;
        
        if (forknum != MAIN_FORKNUM)//MAIN_FORKNUM是什么意思?
            continue;
        process_block_change(forknum, rnode, blkno);
    }
6、pagemap中的bitmap
pg_rewind 工具执行需要打开full_page_writes,而打开了full_page_writes 之后,checkpoint 后每个数据页的第一次修改对应的数据页的全部内容都会写在WAL日志记录中,所以pg_rewind 可以根据WAL 日志的组织结构很容易的找到对应已经修改的数据页信息,并把对应的file_entry_t 的bitmap 置为1。
XLogRecGetBlockTag:XLogReaderState.blocks[XLR_MAX_BLOCK_ID + 1]
您可能感兴趣的文档:

--结束END--

本文标题: PostgreSQL pg_rewind原理

本文链接: https://lsjlt.com/news/45611.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PostgreSQL pg_rewind原理
    一、背景常见的高可用架构中,如果master挂了且有数据没有同步到备,高可用系统会提升备为主对外服务。对于老主有可能再以备的身份加入集群时,可能搭建流复制关系失败。可以用pg_rewind工具使主备的数据一...
    99+
    2024-04-02
  • PostgreSQL pg_rewind report error退出分析
    ...
    99+
    2024-04-02
  • PostgreSQL DBA(32) - HA#1(pg_rewind切换)
    基于streaming repl...
    99+
    2024-04-02
  • PostgreSQL pg_rewind实例--could not find previous WAL record at %X/%X
    一、介绍     作为pg_rewind报错章节补充一个用例,说明其用法。 二、实例     1、history文件 --新主 $&...
    99+
    2024-04-02
  • PostgreSQL事务处理机制原理
    本篇内容主要讲解“PostgreSQL事务处理机制原理”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PostgreSQL事务处理机制原理”吧!背景说明:以ACI...
    99+
    2024-04-02
  • PostgreSQL逻辑复制解密原理解析
    目录1 概念与原理复制槽输出插件复制协议与消息开启流式传输WAL工作流程2 问题与演进问题一:Failover slot问题二:DDL同步问题三: 双向同步其他问题:3 应用与实践全量与增量同步自建实例迁移上云实践在数字...
    99+
    2024-04-02
  • PostgreSQL数据库实现原理是什么
    这篇文章主要讲解了“PostgreSQL数据库实现原理是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PostgreSQL数据库实现原理是什么”吧!Po...
    99+
    2024-04-02
  • PostgreSQL逻辑备份pg_dump使用及其原理解析
    一、原理分析 1、循环调用getopt_long解析命令行参数,将参数保存到static DumpOptions dopt;中2、判断参数是否相容,不相容则退出: options -s/--sche...
    99+
    2024-04-02
  • PostgreSQL、Oracle/MySQL和SQL Server的MVCC实现原理方式
    转: http://www.bkjia.com/oracle/1068936.html PostgreSQL、Oracle/MySQL和SQL Server的MVCC实现原理方式 关...
    99+
    2024-04-02
  • PostgreSQL中空闲数据块管理机制的原理是什么
    本篇文章给大家分享的是有关PostgreSQL中空闲数据块管理机制的原理是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。数据块空闲空间的产...
    99+
    2024-04-02
  • postgresql如何还原数据库
    要还原 PostgreSQL 数据库,可以使用 pg_restore 命令。以下是还原数据库的步骤: 打开终端或命令提示符窗口。...
    99+
    2024-04-22
    postgresql
  • PostgreSQL 数据库备份与还原
    PostgreSQL 数据库备份与还原 目录 备份 还原 栗子 备份 PostgreSQL提供的一个工具pg_dump,逻辑导出数据,生成sql文件或其他格式文件,pg_dump是一个客户端工具,可以远程或本地导出逻辑数据,恢复...
    99+
    2015-11-20
    PostgreSQL 数据库备份与还原
  • PostgreSQL 授权管理
    ...
    99+
    2021-01-17
    PostgreSQL 授权管理
  • PostgreSQL数据库备份和还原(七)
    备份数据库三种方法:SQL转储文件系统级备份。持续存档。 SQL转储使用SQL命令生成一个文件。备份用法: pg_dump dbname>dumpfile pg_dump是一个常规的...
    99+
    2024-04-02
  • 云原生PostgreSQL集群怎么搭建
    搭建云原生PostgreSQL集群可以按照以下步骤进行:1. 部署Kubernetes集群:首先需要在物理或虚拟机上部署一个Kube...
    99+
    2023-09-22
    PostgreSQL
  • PostgreSQL简单管理(一)
    1、初始化数据库集群和其他RDBMS一样,在开始使用PostgreSQL数据库之前需要在磁盘上初始化一个数据库,这里称为数据库集群。数据库集群是一个运行着的数据库服务实例管理的数据库的集合。初始化完后,集群...
    99+
    2024-04-02
  • Postgresql数据-导出备份-导入还原
     导出整个数据库 pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名)   >datadum.sql  导出某个表 pg_dump -h localhost -U postgres...
    99+
    2021-05-17
    Postgresql数据-导出备份-导入还原
  • 怎么理解PostgreSQL事务管理
    本篇内容介绍了“怎么理解PostgreSQL事务管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Th...
    99+
    2024-04-02
  • 分布式数据库原理和PostgreSQL 分布式架构是怎样的
    分布式数据库原理和PostgreSQL 分布式架构是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一、 什么是分布式数据库分...
    99+
    2024-04-02
  • PostgreSQL 批量处理index sql
      --查询索引详细信息 SELECT t.tablename, indexname, c.reltuples AS num_rows, pg_size_pretty(pg_relation_size(quote...
    99+
    2018-02-17
    PostgreSQL 批量处理index sql
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作