首页 > 数据库 >PostgreSQL-PITR 原理

PostgreSQL-PITR 原理

时间:2023-08-08 10:36:30浏览次数:47  
标签:文件 WAL PostgreSQL 备份 PITR 复制 原理 日志 数据库

在 PostgreSQL 的数据目录的 pg_wal (10版本之前是 pg_xlog 子目录)子目录中始终维护一个 WAL 日志文件。该日志文件记录了数据库数据文件的每次改变。最初设计该日志文件的主要目的是为了数据库异常崩溃后,能够重放最后一次 checkpoint 点之后的日志文件,把数据库推到最终的一致状态,避免数据丢失或不一致。

当然,由于此日志文件的机制也提供了另一种热备份方案:先把数据库以文件系统的方式备份出来,同时把相应的 WAL 日志也备份出来。虽然直接复制数据库的数据文件会导致数据文件不一致,如复制的多个数据文件不是同一个时间点的文件。

同时复制一个 8KB 的数据块时也存在数据不一致的情况:假设完前 4KB 个块,而数据库又写了整个 8KB块的内容,这时,复制的这个数据块的前 4KB 块和后 4KB 块不是一个完整的 8KB 数据块,从而导致不一致。但是,因为有了 WAL 日志,即使备份出来的数据块不一致,也可以重放备份开始后的 WAL 日志文件,把备份的文件推到一致状态。

由此可见,当有 WAL 日志之后,备份数据库不再需要一个完美的一致性备份,备份中的任何非一致性数据都会被重放 WAL 日志文件的过程纠正,所以,我们在备份数据库时,可以通过简单的 cp 命令或 tar 等操作系统提供的备份文件的工具,来实现数据库的在线备份。

之后,不停地重放 WAL 日志,就可以把数据库推到备份结束后的任意一个时间点,这就是基于时间点的备份,英文名是 “Point-in-Time Recovery”,缩写为“PITR”。

使用简单的 cp 命令或其他命令把数据库在线复制出来的备份,称为基础备份。从基础备份操作开始之后产生的 WAL 日志和此基础备份构成了一个完整的备份。把基础备份恢复到另一台机器,然后不停地从原始数据库机器上接收 WAL 日志,在新机器上持续重放 WAL 日志,只要应用 WAL 日志足够快,该备数据库就会追上主数据库的变化,拥有当前主数据库的最新数据状态。这个新机器上的数据库被称为 Standby (备份)数据库

当主数据库出现问题无法正常服务时,可把 standby 打开提供服务,从而实现高可用。

把 WAL 日志传送到另一台机器上的方法有两种:一是通过 WAL 归档日志方法;二是通过流复制

-- 摘自 《PostgreSQL修炼之道 从小工到专家》第2版 。


标签:文件,WAL,PostgreSQL,备份,PITR,复制,原理,日志,数据库
From: https://blog.51cto.com/baoyw/7005047

相关文章

  • 最常见的 PostgreSQL 面试题
    PostgreSQL是众多可用数据库中最顶级、最强大和开源的数据库之一。它扩展了SQL语言,主要用作许多移动、Web和分析应用程序的主要数据仓库。对PostgreSQL认证专家的需求增长良好。因此,在这里我们上传了一些常见的PostgreSQL面试问题和答案,以帮助您pojie面试。通过这些Postgre......
  • Nginx 体系化之配置文件重载(平滑升级)原理
    Nginx作为一款高性能的开源Web服务器,以其出色的性能和灵活的配置而备受青眯,在Nginx中,配置文件有着决定性的作用,而配置文件的重载机制更是保障系统稳定运行的关键。本文将讲解一下Nginx配置文件重载的核心原理,以及讲述实际场景的应用Nginx配置文件重载原理1.Nginx配置文件......
  • ArrayList底层原理、线程安全及其相关集合(面试常问)
    一、ArrayList底层原理1.特点及其原理:ArrayList底层基于数组实现,查找快,增删慢2.ArrayList底层原理,初始化及调用add()方法添加元素:默认初始化容量为10第一次创建集合并在添加第一个元素时在底层创建一个默认长度为10的数组:​调用构造函数初始化时默认创建的是空数组只......
  • [系统设计] 计算机系统设计思想:缓存/局部性原理(转载)【待完善】
    1缓存概述缓存思想是计算机系统设计中极为重要的解决手段,其本质原则是————局部性原理在资源有限的情况下,将热点资源、最重要的资源部署到离请求方最近的地方去,以达到性能预期。1.1什么是缓存,为什么要用缓存?缓存就是数据交换的缓冲区(称作Cache),是存贮数据(使用频繁的数据......
  • springboot智能3D导诊系统源码,基于规则模板的开发原理
    互联网智慧3D导诊系统源码通过智能导诊,进行自助问询及挂号服务,减轻导诊台护士压力,挂号更加方便快捷。技术架构:springboot+redis+mybatisplus+mysql+RocketMQ  智慧导诊系统开发原理导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。1、基于规则推理的方法通过人工建......
  • PostgreSQL数据库版本升级
    PostgreSQL数据库版本升级Postgresql是一个非常活跃的社区开源项目,更新速度很快,每一次版本的更新都会积极的修复旧版本的BUG,性能上也会有不同幅度的提升。10之前的版本由三部分组成,10开始只有两部分数字组成。PostgreSQL版本发布规则,一年一个大版本,一个季度一个小版本;P......
  • 复习笔记|第九、十章 Linux文件系统《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.Ext2文件卷的布局?各部分的作用是什么?Ext2文件卷的布局◼Ext2把磁盘块分为组,每组包含存放在相邻磁道的数据块和索引节点。块组的大小相等并顺序安排。◼Ext2用“块组描述符”来描述这些块组本身的结......
  • 复习笔记|第十四章 Windows操作系统模型《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.Windows采用什么样的体系结构?从图中看出,系统划分为两种状态,核心态和用户态。粗线上方代表用户态进程,下方是核心态的操作系统服务。用户态的进程只能运行在受保护的地址空间。因此,四种类型的用户态进......
  • 复习笔记|第十五章 Windows进程和线程管理《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.管理进程和线程的数据结构:执行体进程块EPROCESS、执行体线程块ETHREAD、内核进程块KPROCESS、内核线程块KTHREAD。structEPROCESS{P285KPROCESSPCB;内核进程块ObjectTable;进程的句......
  • 复习笔记|第十六章 Windows存储器管理《操作系统原理教程》
    参考教材:《操作系统原理教程(第4版)》刘美华翟岩龙著大纲问题回答(精简版)1.两种数据结构:虚拟地址描述符VAD、区域对象,这两种结构各有什么作用?◆P304◼Windows系统采用一棵由虚拟地址描述符(VAD)构成的平衡二叉树来管理进程私有地址空间。一个进程的一组VAD结构构成一棵自平衡二......