PostgreSQL技术内幕18:物理备份工具pg_basebackup

0.简介

PG自带备份工具有多种,pg_basebackup、pg_dump、pg_dumpall,其中pg_basebackup是文件系统级别的备份,其余两种是逻辑备份。本文主要介绍PG备份工具产生的背景和概念,以及对pg_basebackup使用方法和其实现原理进行详细说明,剩余两种工具在后续文章进行详细分析。

1.背景和概念

数据库系统在运行过程中可能会面临着各种突发问题(硬件故障、软件错误、人为失误、网络攻击等),如果没有备份,一旦出现数据丢失,很难恢复数据。备份工具就是为了解决这个问题,通过数据库备份工具去定期备份数据库,可以将当前的数据状态保存下来,当发生数据丢失时,可以通过还原备份来恢复数据,最大程度地减少数据丢失带来的影响。
备份可以分为物理备份和逻辑备份:
1)物理备份
定义:物理备份是通过直接复制数据库文件的方式来创建备份。
原理:物理备份是在文件系统之下和硬件磁盘驱动之上进行的。它忽略了文件和结构,处理过程简洁,因此在执行过程中所花费在搜索操作上的开销较少,备份的性能很高。
2)逻辑备份
定义:逻辑备份是指使用软件技术从数据库中导出数据并写入一个输出文件,该文件的格式一般与原数据库的文件格式不同,只是原数据库中数据内容的一个映像。因此,逻辑备份文件只能用来对数据库进行逻辑恢复,即数据导入。
原理:逻辑备份是基于文件级别的备份,由于每个文件都是由不同的逻辑块组成,且这些逻辑块可能存储在分散的磁盘块上,逻辑备份在对非连续存储磁盘上的文件进行备份时需要额外的查找操作。这些额外的操作增加了磁盘的开销,降低了磁盘的吞吐率。

2.pg_basebackup用法介绍

可以直接使用–help来查看

pg_basebackup --help
pg_basebackup takes a base backup of a running PostgreSQL server.Usage:pg_basebackup [OPTION]...Options controlling the output:-D, --pgdata=DIRECTORY receive base backup into directory-F, --format=p|t       output format (plain (default), tar)-r, --max-rate=RATE    maximum transfer rate to transfer data directory(in kB/s, or use suffix "k" or "M")-R, --write-recovery-confwrite recovery.conf for replication-T, --tablespace-mapping=OLDDIR=NEWDIRrelocate tablespace in OLDDIR to NEWDIR--waldir=WALDIR    location for the write-ahead log directory-X, --wal-method=none|fetch|streaminclude required WAL files with specified method-z, --gzip             compress tar output-Z, --compress=0-9     compress tar output with given compression levelGeneral options:-c, --checkpoint=fast|spreadset fast or spread checkpointing-C, --create-slot      create replication slot-l, --label=LABEL      set backup label-n, --no-clean         do not clean up after errors-N, --no-sync          do not wait for changes to be written safely to disk-P, --progress         show progress information-S, --slot=SLOTNAME    replication slot to use-v, --verbose          output verbose messages-V, --version          output version information, then exit--no-slot          prevent creation of temporary replication slot--no-verify-checksumsdo not verify checksums-?, --help             show this help, then exitConnection options:-d, --dbname=CONNSTR   connection string-h, --host=HOSTNAME    database server host or socket directory-p, --port=PORT        database server port number-s, --status-interval=INTERVALtime between status packets sent to server (in seconds)-U, --username=NAME    connect as specified database user-w, --no-password      never prompt for password-W, --password         force password prompt (should happen automatically)Report bugs to <pgsql-bugs@postgresql.org>.

3.实现原理

3.1 pg_basebackup 备份客户端实现原理

代码文件为:pg_basebackup .c main函数入口进入后备份流程如下

在这里插入图片描述

可以看到,几个主要的分支,一个是是否为stream模式,如果是的话会另外fork一个进程同步并行备份日志文件(这种方式可以直接备份日志,而不需要日志文件一直保留直到备份结束,但却不能直接应用且和文件并不是使用同一个进程,不利于一起压缩),如果不是会在备份完数据后备份日志文件(需要保留当前时间点日志一直到备份结束);另外一个分支是如何接受文件,是否是需要服务端压缩后发过来再解压还是直接发送接收后不需要解压。

3.2 back server 内核服务端实现原理

代码文件为:walsender.c中的exec_replication_command函数,相应流程如下:

在这里插入图片描述

主要看其主流程,先后发送数据文件和日志文件,其中日志文件只发送需要的且会按照时间进行排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/474134.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Python实现的HDR图像处理算法

此代码会读取两张图片&#xff0c;一张用于保留高光细节&#xff0c;另一张用于保留暗部细节。两张图片按指定比例进行像素融合&#xff0c;最终生成一张合成的HDR图片。 import cv2 import numpy as npdef hdr_fusion(highlight_img_path, shadow_img_path, output_path, alp…

计算机网络-理论部分(二):应用层

网络应用体系结构 Client-Server客户-服务器体系结构&#xff1a;如Web&#xff0c;FTP&#xff0c;Telnet等Peer-Peer&#xff1a;点对点P2P结构&#xff0c;如BitTorrent 应用层协议定义了&#xff1a; 交换的报文类型&#xff0c;请求or响应报文类型的语法字段的含义如何…

【JavaEE初阶 — 多线程】wait() notify()

1. 协调多个线程之间的执行先后顺序的方法介绍 由于线程之间是抢占式执行的&#xff0c;因此线程之间执行的先后顺序难以预知&#xff1b;但是实际开发中&#xff0c;有时候我们希望合理地协调多个线程之间的执行先后顺序。 拓展&#xff1a; wait() 和 sleep() 的区别 …

Vscode/Code-server无网环境安装通义灵码

Date: 2024-11-18 参考材料&#xff1a;https://help.aliyun.com/zh/lingma/user-guide/individual-edition-login-tongyi-lingma?spma2c4g.11186623.0.i0 1. 首先在vscode/code-server插件市场中安装通义插件&#xff0c;这步就不细说了。如果服务器没网&#xff0c;会问你要…

Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在共享经济…

美赛优秀论文阅读--2023C题

文章目录 1.题目说明2.我对于这个题目信息的理解3.优秀论文学习3.1摘要3.2相关的算法模型 4.总结 1.题目说明 今天阅读的这个文章来自于这个2023年的这个美赛的这个C题的论文&#xff1b; 我们的这个题目可以到网上去找&#xff0c;这个还是比较容易找到的&#xff0c;大致就…

ChromeDriver驱动下载地址更新(保持最新最全)

说明&#xff1a; ChromeDriver 是 Selenium WebDriver 用于控制 Chrome 的独立可执行文件。 为了方便下载使用&#xff0c;本文保持ChromeDriver的最新版本更新&#xff0c;并提供115.0.5763.0-133.0.6841.0版本的下载地址&#xff1a; 所有版本和下载地址&#xff1a; &am…

delphi fmx android 离线人脸识别

搜遍全网都没有找到delphi android 能用的 离线人脸识别,无需注册什么开发者 有这方面需求的可以用fsdk 这边用的luxand.FSDK8.0 android下的注册号要自己找下 1,用老猫的工具将android 下的sdk,FSDK.java 编译成FSDK.jar 老猫的工具 2,用上面的工具将FSDK.jar 生成de…

【模块一】kubernetes容器编排进阶实战资源对象之Configmap与Secret简介

kubernetes 资源对象详解及示例 kubernetes 的几个重要概念 资源对象&#xff1a;kubernetes基于声明式API&#xff0c;和资源对象进行交互。 yaml文件&#xff1a;为了方便后期管理&#xff0c;通过使用yaml文件通过API管理资源对象。 yaml必需字段&#xff1a; apiVersio…

游戏引擎学习第14天

视频参考:https://www.bilibili.com/video/BV1iNUeYEEj4/ 1. 为什么关注内存管理&#xff1f; 内存分配是潜在的失败点&#xff1a; 每次进行内存分配&#xff08;malloc、new等&#xff09;时&#xff0c;都可能失败&#xff08;例如内存不足&#xff09;。这种失败会引入不稳…

游戏引擎学习第12天

视频参考:https://www.bilibili.com/video/BV1yom9YnEWY 这节没讲什么东西&#xff0c;主要是改了一下音频的代码 后面有介绍一些alloc 和malloc,VirtualAlloc 的东西 _alloca 函数&#xff08;或 alloca&#xff09;分配的是栈内存&#xff0c;它的特点是&#xff1a; 生命周…

django——创建 Django 项目和 APP

2.创建 Django 项目和 APP 命令&#xff1a; 创建Django项目 django-admin startproject name 创建子应用 python manager.py startapp name 2.1 创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。 在django中&#xff0c;…

OceanBase 分区表详解

1、分区表的定义 在OceanBase数据库中&#xff0c;普通的表数据可以根据预设的规则被分割并存储到不同的数据区块中&#xff0c;同一区块的数据是在一个物理存储上。这样被分区块的表被称为分区表&#xff0c;而其中的每一个独立的数据区块则被称为一个分区。 如下图所示&…

学习大数据DAY61 宽表加工

目录 模型设计 加工宽表 任务调度&#xff1a; 大表 - 把很多数据整合起来 方便后续的明细查询和指标计算 模型设计 设计 建模 设计: excel 文档去编写 建模: 使用建模工具 PowerDesigner Navicat 在线画图工具... 把表结构给绘 制出来 共享\项目课工具\pd 加工宽表 数…

uniapp微信小程序转发跳转指定页面

onShareAppMessage 是微信小程序中的一个重要函数&#xff0c;用于自定义转发内容。当用户点击右上角的菜单按钮&#xff0c;并选择“转发”时&#xff0c;会触发这个函数。开发者可以在这个函数中返回一个对象&#xff0c;用于定义分享卡片的标题、图片、路径等信息。 使用场…

Datawhale组队学习】模型减肥秘籍:模型压缩技术3——模型量化

模型量化的目的是通过将浮点运算转换为定点运算&#xff0c;以减少模型大小、内存和存储需求&#xff0c;同时加快推理速度&#xff0c;降低计算功耗&#xff0c;使得模型在低算力设备上运行更加高效&#xff0c;特别适用于嵌入式设备或移动端场景。 不同数据类型&#xff08;…

arkUI:网格布局(Grid)

arkUI&#xff1a;网格布局&#xff08;Grid&#xff09; 1 主要内容说明2 网格布局的相关内容2.1 基本使用2.1.1 源码1 &#xff08;Grid网格布局&#xff09;2.1.2 源码1运行效果 2.2 设置排列方式2.2.1 核心布局参数2.2.2 网格单元格参数&#xff08;GridItem&#xff09;2.…

Cherno OpenGL(28 ~ 33)

批量渲染-介绍 在这里我们将在一个drawcall打包多个几何体。即 batch geometry。 我们在这里将聚焦于2d渲染&#xff0c;我们如何渲染一堆2d的quads或者说rectangles呢&#xff1f; 一种情况是比如一个2d游戏有很多个tile组成&#xff0c;要去渲染这些tile&#xff1b;另一种…

网络安全之国际主流网络安全架构模型

目前&#xff0c;国际主流的网络安全架构模型主要有&#xff1a; ● 信息技术咨询公司Gartner的ASA&#xff08;Adaptive Security Architecture自适应安全架构&#xff09; ● 美国政府资助的非营利研究机构MITRE的ATT&CK&#xff08;Adversarial Tactics Techniques &…

游戏引擎学习第16天

视频参考:https://www.bilibili.com/video/BV1mEUCY8EiC/ 这些字幕讨论了编译器警告的概念以及如何在编译过程中启用和处理警告。以下是字幕的内容摘要&#xff1a; 警告的定义&#xff1a;警告是编译器用来告诉你某些地方可能存在问题&#xff0c;尽管编译器不强制要求你修复…