暂无图片
pg_probackup备份工具简介
最近更新:2022-06-13 11:11:03

一、概述
pg_probackup是一个管理 PostgreSQL 数据库集群备份和恢复的实用程序。 它旨在执行 PostgreSQL 实例的定期备份,能够在数据库发生故障时恢复服务器。

二、备份优势

  • 全量备份 : 全量备份会将数据库集下所有的数据文件进行备份
  • 增量备份:增量备份备份的是上一次备份之后发生改变的数据,极大的节省了磁盘空间,加快了备份和恢复的速度。增量备份有三种模式(delta/page/ptrack)
  • 增量恢复:page-level增量恢复允许通过重用目标目录中有效的未更改的页面来显著加快恢复速度
  • 合并:可实施增量更新备份策略,无需定期进行完全备份
  • 验证:自动数据一致性检查和按需备份验证,无需实际数据恢复
  • 验证:使用 checkdb 命令按需验证 PostgreSQL 实例。
  • 保留:根据保留策略管理 WAL 归档和备份,可以根据恢复时间或要保留的备份数量配置保留策略,以及指定特定备份的生存时间 (TTL)。 过期的备份可以合并或删除。
  • 并行化:支持backup、restore、merge、delete、validate、checkdb
  • 压缩:以压缩状态存储备份数据以节省磁盘空间
  • 重复数据删除(Deduplication):通过不复制未更改的非数据文件(例如 _vm 或 _fsm)来节省磁盘空间
  • 远程操作:备份位于远程操作系统上的postgresql实例或远程恢复
  • 备用服务器备份:通过从备用服务器进行备份来避免主服务器上的额外负载
  • 外部目录:备份于postgresql数据库数据目录(PGDATA)之外的目录和文件
  • 备份目录:以纯文本或json格式获取备份列表和相应的元信息
  • 归档目录:以纯文本或json格式获取所有WAL时间线和相应元信息的列表
  • 部分还原:仅还原指定的数据库或将指定的数据库排除在还原之外

三、增量备份的三种模式 full备份包含从头开始恢复数据库集群所需的所有数据文件 Incremental备份仅存储自上次备份以来已更改的数据。Incremental备份仅存储自上次备份以来已更改的数据。pg_probackup支持以下三种增量备份模式:

1. PAGE备份。在这种模式下,pg_probackup从上次完整或增量备份开始扫描归档中的所有 WAL 文件。新创建的备份仅包含 WAL 记录中提到的页面。这要求自上次备份以来的所有 WAL 文件都存在于 WAL归档中。

2. DELTA备份。在此模式下,pg_probackup读取 PGDATA 目录中的所有数据文件,并且仅复制自上次备份以来更改的那些页面。它的运行不需要连续存档。此模式可能会施加与备份相等的只读 I/O 压力。

3. PTRACK备份。在这种模式下,PostgreSQL 动态跟踪页面更改。它的运行不需要连续存档。每次更新关系页面时,该页面都会在PTRACK此关系的特殊位图中标记。由于一页只需要PTRACK分叉中的一位,因此此类位图非常小。跟踪意味着数据库服务器操作的一些小开销,加快了增量备份。仅支持Postgres Pro Standard and Postgres Pro Enterprise

pg_probackup只能进行物理在线备份,在线备份需要 WAL 进行一致恢复。因此,无论选择何种备份模式(FULL、PAGE 或 DELTA),使用 pg_probackup进行的任何备份都必须使用以下 WAL 交付模式之一:

  • archive :此类备份依赖于连续归档来确保一致的恢复

  • stream:此类备份包括在进行备份时将集群恢复到一致状态所需的所有文件。无论是否 设置了连续归档,一致恢复所需的 WAL 段在备份期间通过复制协议流式传输并包含到备份文件中。这就是为什么这种备份被称为自治( autonomous)或独立( standalone)。

四、pg_probackup 工具的一些局限性:

1.仅支持Postgres Pro 9.5以上的版本
2.Windows系统不支持远程备份恢复
3.在Unix系统在,如果数据库版本小于等于 Postgresql 10, 备份用户必须是安装PG的操作系统用户。例如,如果PostgreSQL服务器由 user 启动postgres,则该backup命令也必须由 user 运行postgres。要在使用 SSH 以远程模式进行备份时满足此要求,您必须将 --remote-user选项设置为postgres.
4.对于PostgreSQL 9.5版本数据库,进行备份的数据库账号必须具体superuser的角色,否则无法备份pg_create_restore_point(text) 、 pg_switch_xlog()
5.参数block_size 和wal_block_size备份和恢复服务器要一致,否则无法备份
6.通过 ssh 运行远程操作时,远程和本地 pg_probackup 版本必须相同。

五、安装

http://repo.postgrespro.ru/pg_probackup/rpm/2.5.5/centos-7-x86_64/

Image.png


rpm方式:
rpm -ivh http://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm 
yum install -y  pg_probackup-12.x86_64
yum install -y  pg_probackup-12-debuginfo.x86_64


源码包:
$ wget https://github.com/postgrespro/pg_probackup/archive/2.5.5.tar.gz
解压源码
$ tar zxvf 2.5.5.tar.gz
进入源码目录
$ cd pg_probackup-2.5.5/
编译   ---PG_CONFIG是我们pg_config程序所在路径,top_srcdir为postgres源码所在路径
$ make USE_PGXS=1 PG_CONFIG=/usr/pgsql-12/bin/pg_config top_srcdir=/opt/postgresql-12.6
安装
$ make USE_PGXS=1 PG_CONFIG=/usr/pgsql-12/bin/pg_config top_srcdir=/opt/postgresql-12.6 install
查看安装版本
$ /usr/pgsql-12/bin/pg_probackup version
pg_probackup 2.5.5 (PostgreSQL 12.6

六、配置 1、初始化catalog 用于存放备份文件和归档日志文件

mkdir   /backup
chown  -R postgres:postgres   /backup
chmod  755   /backup

初始化backup  catalog

/usr/pgsql-12/bin/pg_probackup-12 init -B /backup/
INFO: Backup catalog '/backup' successfully inited

pg_probackup创建备份目录,其中包含以下子目录: Image.png

  • wal/ -wal文件目录。
  • backups/-备份数据文件的目录。

如果使用非postgres用户需要配置以下权限,本文使用postgres用户操作

BEGIN; 
CREATE ROLE backup WITH LOGIN REPLICATION; 
GRANT USAGE ON SCHEMA pg_catalog TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup; 
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup; 
COMMIT;

2、添加实例

/usr/pgsql-12/bin/pg_probackup-12 add-instance -B backup_dir -D data_dir --instance instance_name [remote_options]
-- 本地添加备份instance 示例
[postgres@pg03 ~]$ pg_probackup-12 add-instance -B /backup/ -D /postgresql/data/ --instance pg01
INFO: Instance 'pg01' successfully inited


##添加远程实例
......