一、概述
pg_probackup是一个管理 PostgreSQL 数据库集群备份和恢复的实用程序。 它旨在执行 PostgreSQL 实例的定期备份,能够在数据库发生故障时恢复服务器。
二、备份优势
三、增量备份的三种模式 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/

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创建备份目录,其中包含以下子目录:

如果使用非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
##添加远程实例