当前位置: 首页 > article >正文

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-conf
                         write recovery.conf for replication
  -T, --tablespace-mapping=OLDDIR=NEWDIR
                         relocate tablespace in OLDDIR to NEWDIR
      --waldir=WALDIR    location for the write-ahead log directory
  -X, --wal-method=none|fetch|stream
                         include required WAL files with specified method
  -z, --gzip             compress tar output
  -Z, --compress=0-9     compress tar output with given compression level

General options:
  -c, --checkpoint=fast|spread
                         set 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-checksums
                         do not verify checksums
  -?, --help             show this help, then exit

Connection 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=INTERVAL
                         time 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.kler.cn/a/400846.html

相关文章:

  • Siglus引擎 Unpack | 未完待续
  • 基于普中51单片机开发板的电子门铃设计( proteus仿真+程序+设计报告+讲解视频)
  • C# 面向对象
  • 远程jupyter lab的配置
  • css 使用图片作为元素边框
  • 一体化运维监控管理平台:产品架构与功能解析
  • 静态路由综合实验
  • 算法——螺旋矩阵II(leetcode59)
  • 基于YOLOv8深度学习的智慧社区高空抛物检测系统研究与实现(PyQt5界面+数据集+训练代码)
  • 传奇996_22——自动挂机
  • 大数据学习15之Scala集合与泛型
  • 力扣经典面试13罗马数字转整数
  • springboot006基于SpringBoot的网上订餐系统(源码+包运行+LW+技术指导)
  • DOM NodeList 对象简介
  • 7天掌握SQL - 第一天:数据库基础与SQL入门
  • 在AndroidStudio中新建项目时遇到的Gradle下载慢问题,配置错的按我的来,镜像地址不知道哪个网页找的,最主要下载要快
  • 汽车资讯新趋势:Spring Boot技术解读
  • ClickHouse的介绍、安装、数据类型
  • 泷羽sec-安全见闻(8)
  • Gradio 和 Streamlit 安装与使用教程
  • 在Unity中使用Epplus写Excel
  • 使用Mybatis向Mysql中的插入Point类型的数据全方位解析
  • API 数据处理与 SQL 批量更新技巧:CASE 语句优化操作指南
  • RadSystems 自定义页面全攻略:个性化任务管理系统的实战设计
  • CSS3_过渡(八)
  • 力扣(leetcode)面试经典150题——26. 删除有序数组中的重复项