百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

PostgreSQL开发与实战(5)备份管理pg_probackup

toyiye 2024-09-16 05:55 4 浏览 0 评论

作者:太阳

一、pg_probackup概述

pg_probackup 是一款免费的postgres数据库集群备份工具,与其他备份工具相比,它主要有如下一些优势:

  • 提供增量备份,增量备份一定程度上可以节省磁盘空间的使用并且减少备份时间消耗
  • 可通过全量备份+增量备份进行增量恢复
  • 无需通过实际的数据恢复操作验证备份文件是否有效
  • Verification: on-demand verification of Postgres Pro instance with
    the checkdb command.
  • 可以通过设置恢复时间以及备份最大文件数来进行备份文件以及WAL归档日志的保留策略
  • 对于backup、restore、merge、delete、validate、checkdb操作都可开启并发线程执行
  • 提供压缩备份以节省磁盘空间
  • 可对远程实例进行备份恢复
  • 可从standby实例进行备份
  • 对于PGDATA外的目录数据(如:脚本、日志转储、sql dump 文件等),可使用参数额外指定进行备份
  • 可查看已备份数据备份以及归档的列表以及相关详细信息
  • 支持部分还原(还原部分数据库)

pg_probackup 下的几种备份方式:

  • 全量备份 : 全量备份会将数据库集下所有的数据文件进行备份
  • 增量备份 : 增量备份仅会备份上一次全量备份之后发生变更的数据,相对于全量备份其空间占用有了极大的缩减
  • DELTA模式 : 在该模式下,pg_probackup会扫描所有的数据目录文件,然后将上一次备份后发生改变的数据页进行拷贝备份。这种模式下增量备份的IO消耗基本等同于全量备份。
  • PAGE模式 : 在该模式下,pg_probackup仅会扫描备份上一次备份结束时刻之后的所有WAL归档日志。这种模式下的增量备份必须保证wal日志有设置合理的归档(wal_level > minimal 、archive_mode = on/always、archive_command 使用 pg_probackup进行archive-push 归档)。
  • PTRACK模式 : 在该模式下pg_probackup
    会实时跟踪源备份实例端数据页的变化,对于距上一次备份后发生更新的数据页,将其记录在 bitmap
    中,以此来加快增量备份的时间。该模式下不需要关注WAL日志归档的设置,增量备份时间相对于DELTA更快,但是由于需要实时跟踪发生变化的数据页,所以对源端数据库服务器是有一定的资源消耗的。

pg_probackup 工具的一些局限性:

  • 仅支持Postgres Pro 9.5以上的版本
  • Windows系统不支持远程备份恢复
  • 在Unix系统在,如果数据库版本小于等于 Postgres Pro 10 ,只能通过与OS同账号的超级用户postgres进行备份。
  • 对于PostgreSQL 9.5版本数据库,进行备份的数据库账号必须具体superuser的角色,否则无法备份
    pg_create_restore_point(text) 、 pg_switch_xlog()
  • 备份工具与数据库 block_size 、 wal_block_size
    必须一致,否则无法备份(block_size、wal_block_size在安装包源码编译时设置)

二、安装部署

2.1 源码安装

1、下载安装包

# wget -c https://github.com/postgrespro/pg_probackup/archive/2.4.2.tar.gz
# tar xf 2.4.2.tar.gz
# cd pg_probackup-2.4.2/
# ll
总用量 176
drwxrwxr-x 2 root root   4096 7月   1 08:07 doc
-rw-rw-r-- 1 root root 128060 7月   1 08:07 Documentation.md
-rw-rw-r-- 1 root root   4976 7月   1 08:07 gen_probackup_project.pl
-rw-rw-r-- 1 root root   1200 7月   1 08:07 LICENSE
-rw-rw-r-- 1 root root   3962 7月   1 08:07 Makefile
-rw-rw-r-- 1 root root  13345 7月   1 08:07 README.md
drwxrwxr-x 3 root root   4096 7月   1 08:07 src
drwxrwxr-x 4 root root   4096 7月   1 08:07 tests
drwxrwxr-x 2 root root   4096 7月   1 08:07 travis

2、编译安装

# PG_CONFIG是我们pg_config程序所在路径,top_srcdir为postgres源码所在路径
# make USE_PGXS=1 PG_CONFIG=/usr/local/pgsql/bin/pg_config  top_srcdir=/usr/local/postgresql-12.2

# ll
总用量 612
drwxrwxr-x 2 root root   4096 7月   1 08:07 doc
-rw-rw-r-- 1 root root 128060 7月   1 08:07 Documentation.md
-rw-rw-r-- 1 root root   4976 7月   1 08:07 gen_probackup_project.pl
-rw-rw-r-- 1 root root   1200 7月   1 08:07 LICENSE
-rw-rw-r-- 1 root root   3962 7月   1 08:07 Makefile
-rwxr-xr-x 1 root root 445832 9月  22 21:55 pg_probackup            //编译后
-rw-rw-r-- 1 root root  13345 7月   1 08:07 README.md
drwxrwxr-x 3 root root   4096 9月  22 21:55 src
drwxrwxr-x 4 root root   4096 7月   1 08:07 tests
drwxrwxr-x 2 root root   4096 7月   1 08:07 travis

3、版本检查

# 查看版本
# ./pg_probackup --version
pg_probackup 2.4.2 (PostgreSQL 12.2)

2.2 rpm包安装部署

rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm
yum install pg_probackup-13
yum install pg_probackup-13-debuginfo

三、常用命令

初始化备份目录

$ pg_probackup init -B ${backup_dir}

添加实例

## 本地实例
pg_probackup  add-instance -B ${backup_dir} -D ${PGDATA} --instance ${instance_name}

## 添加远程实例
pg_probackup  add-instance -B ${backup_dir} -D ${PGDATA} --instance ${instance_name} --remote-prot=ssh --remote-host=${remote_ip} --remote-port=${remote_ssh_port} --remote-user=${remote_ssh_user} --remote-path=${pg_probackup_dir}

备份

## 本地实例全量备份
pg_probackup backup -B ${backup_dir} --instance ${instance_name} -b full

## 远程实例全量备份
pg_probackup backup -B ${backup_dir} --instance ${instance_name} --remote-user=${remote_ssh_user} --remote-host=${remote_ip} --remote-port=${remote_ssh_port} -b full

## 增量备份
pg_probackup backup -B -B ${backup_dir} --instance ${instance_name} -b page|detla|ptrack

恢复

## 根据备份集恢复
pg_probackup restore -B ${backup_dir} --instance ${instance_name} -i ${backup_id}
## 不完整恢复,恢复部分database
pg_probackup restore -B ${backup_dir} --instance ${instance_name} --db-include=${database_name1} --db-include=${database_name2}
## 按时间点恢复
pg_probackup restore -B ${backup_dir} --instance ${instance_name} --recovery-target-time='2020-09-22 22:49:34'
pg_probackup restore -B ${backup_dir} --instance ${instance_name} --recovery-target-xid='687'
pg_probackup restore -B ${backup_dir} --instance ${instance_name} --recovery-target-lsn='16/B374D848'
pg_probackup restore -B ${backup_dir} --instance ${instance_name} --recovery-target-name='before_app_upgrade'
pg_probackup restore -B ${backup_dir} --instance ${instance_name} --recovery-target='latest'
pg_probackup restore -B ${backup_dir} --instance ${instance_name} -recovery-target='immediate'

查看备份文件可用性

pg_probackup show -B ${backup_dir} --instance ${instance_name} -i ${backup_id}

查看备份详情

pg_probackup show -B ${backup_dir} --instance ${instance_name}  -i ${backup_id}
#Configuration
backup-mode = FULL                  //备份模式
stream = false                      //是否启用stream
compress-alg = none
compress-level = 1                  //压缩等级
from-replica = false
#Compatibility
block-size = 8192                   //blocksize
xlog-block-size = 8192
checksum-version = 0
program-version = 2.4.2
server-version = 12                 //PG Version
#Result backup info
timelineid = 1
start-lsn = 0/A000028
stop-lsn = 0/B0000B8
start-time = '2020-09-22 22:49:33+08'
end-time = '2020-09-22 22:49:39+08'
recovery-xid = 658
recovery-time = '2020-09-22 22:49:34+08'
data-bytes = 41423956
wal-bytes = 16777216
uncompressed-bytes = 41389959
pgdata-bytes = 41389720
status = OK
primary_conninfo = 'user=postgres port=5432 sslmode=disable sslcompression=0 gssencmode=disable krbsrvname=postgres target_session_attrs=any'
content-crc = 1486842437

查看归档详情

pg_probackup show -B ${backup_dir} --instance ${instance_name} --archive

配置 Retention Policy

  • -retention-redundancy=redundancy : 保留备份多少天 FULL
  • -retention-window=window : 可恢复多少天之前备份
pg_probackup set-config -B ${backup_dir} --instance ${instance_name} --retention-redundancy 7 --retention-window 7

$ /usr/local/pg_probackup-2.4.2/pg_probackup show-config -B /data/pgdata_probackup/ --instance local_5432
# Backup instance information
pgdata = /data/pgsql12/data
system-identifier = 6870373621203487994
xlog-seg-size = 16777216
# Connection parameters
pgdatabase = postgres
# Replica parameters
replica-timeout = 5min
# Archive parameters
archive-timeout = 5min
# Logging parameters
log-level-console = INFO
log-level-file = OFF
log-filename = pg_probackup.log
log-rotation-size = 0TB
log-rotation-age = 0d
# Retention parameters
retention-redundancy = 7
retention-window = 7
wal-depth = 0
# Compression parameters
compress-algorithm = none
compress-level = 1
# Remote access parameters
remote-proto = ssh

删除过期数据

pg_probackup delete -B ${backup_dir} --instance ${instance_name} --delete-expired

--同时删除过期WAL
pg_probackup delete -B ${backup_dir} --instance ${instance_name} --delete-expired --delete-wal

--使用新策略覆盖当前策略删除
pg_probackup delete -B ${backup_dir} --instance ${instance_name} --delete-expired --delete-wal --retention-window=1 --retention-redundancy=1

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码