暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

pg_probackup物理备份与恢复

、pg_probackup概述

pg_probackup 是一款免费的postgres数据库集群备份工具,与pg_basebackup和pg_rman相比,具有以下优势:

1、提供增量备份,增量备份一定程度上可以节省磁盘空间的使用并减少备份耗时

2、可以通过全量备份+增量备份进行增量恢复

3、无需通过实际的数据恢复操作即可验证备份文件是否有效

4、提供备份压缩以节省磁盘空间

5、可以对远程实例进行备份【远程备份要实现SSH互信】

6、可以从STANDBY实例进行备份

7、可以查看已备份数据备份以及归档的列表以及相关详细信息

8、支持部分还原(还原部分数据库)

9、支持对备份集的管理

10、并行恢复

pg_probackup备份方式:

1、全量备份:将数据库集下的所有数据文件进行备份

2、增量备份:增量备份仅会备份上一次备份之后发生变更的数据,相对于全量备份其空间占用有了极大的缩减

2.1、DELTA模式:在该模式下,pg_probackup会扫描所有的数据目录文件,然后将上一次备份后发生改变的数据页进行拷贝备份。这种模式下
增量备份的IO消耗(读IO)基本等同于全量备份

2.2、PAGE模式:该模式下,pg_probackup仅会扫描备份上一次备份结束时刻之后的所有WAL归档日志。这种模式下的增量备份必须保证WAL日志有设置合理的归档
(wal_level>minimal、archive_mode=on/always、archive_command使用pg_probackup 进行archive-push归档)

2.3、PTRACK模式:在该模式下,pg_probackup会实时跟踪源备份实例端数据页的变化,对于距上一次备份发生更新的数据页,将其记录到bitmap中,以此来加快
增量备份的时间。该模式下不需要关注WAL日志归档设置,增量备份时间相对于DELTA更快,但是由于需要实时跟踪发生变化的数据页,所以对源端数据库服
务器有一定的资源消耗【需要设置:CREATE EXTENSION ptrack;启用跟踪页面更新:ptrack.map_size】

注意:备份工具与数据库block_size、wal_block_size必须一致,否则无法备份(block_size、wal_block_size在安装包源码编译时设置)

注意:
pg_probackup,存在一个BUG,其寻址范围最大是4GB,也就意味着不管你备份什么文件,备份结果最大也就4GB,如果修改了segment size超过4GB,则意味着备份
不完整,数据是不可靠的。

pg_probackup只支持PG9.5版本之后

所需要的用户权限:

PG9.5:【如果要使用stream模式,用户必须具有replication权限,wal_level设置大于minimal,max_wal_sender要足够大】

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) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() 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;

PG9.6【如果要使用stream模式,用户必须具有replication权限,wal_level设置大于minimal,max_wal_sender要足够大】

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) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_xlog() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_xlog_replay_location() 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;

PG10版本及以后:【如果要使用stream模式,用户必须具有replication权限,wal_level设置大于minimal,max_wal_sender要足够大】

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;

使用步骤:

  • 创建备份用户,并授权

  • 初始化备份目录

  • 添加备份实例—>删除备份实例

  • 为备份实例进行相关配置【可选】

  • 执行备份操作

  • 执行备份校验

  • 删除过期备份

二:pg_probackup安装

RPM安装:rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm
yum install pg_probackup-{13,12,11,10,9.6,9.5}
yum install pg_probackup-{13,12,11,10,9.6,9.5}-debuginfo

源码编译:

tar -xzvf pg_probackup.tar.gz
cd pg_probackup
make USE_PGXS=1 pg_config=<path_to_pg_config> top_srcdir=<path_to_postgresql_source_tree>
make USE_PGXS=1 pg_config=<path_to_pg_config> top_srcdir=<path_to_postgresql_source_tree> install
注意:
pg_config 是pg_config程序所在路径
top_srcdir 是postgresql源码所在路径
EG:
make USE_PGXS=1 pg_config=/opt/pg151/bin top_srcdir=/home/pg15/postgresql-15.1
make USE_PGXS=1 pg_config=/opt/pg151/bin top_srcdir=/home/pg15/postgresql-15.1 install

三:命令汇总

pg_probackup version
显示版本信息

pg_probackup help[command]
显示帮助信息

pg_probackup init -B backup_dir
初始化一个比分目录

pg_probackup add-instance -B backup_dir -D data_dir —instance instance_name

添加一个备份实例(可以添加本地备份实例,也可以添加远程备份实例)

pg_probackup del-instance -B backup_dir —instance instance_name

删除一个备份实例
pg_probackup set-config -B backup_dir —instance instance_name[option…]
pg_probackup set-backup -B backup_dir —instance instance_name -i backup_id[option…]
pg_probackup show-config -B backup_dir —instance instance_name[—format=format]
pg_probackup show -B backup_dir[option…]

显示备份集信息
pg_probackup backup -B backup_dir —instance instance_name -b backup_mode[option…]

执行备份
pg_probackup restore -B backup_dir —instance instance_name[option…]

恢复一个数据库
pg_probackup checkdb -B backup_dir —instance instance_name -D data_dir[option…]
pg_probackup validate -B backup_dir[option…]
校验备份的有效性

pg_probackup merge -B backup_dir —instance instance_name -i backup_id[option…]
pg_probackup delete -B backup_dir —instance instance_name { -i backup_id | —delete-wal | —delete-expired | —merge-expired } [option…]

删除一个备份
pg_probackup archive-push -B backup_dir —instance instance_name —wal-file-path wal_file_path —wal-file-name wal_file_name[option…]
pg_probackup archive-get -B backup_dir —instance instance_name —wal-file-path wal_file_path —wal-file-name wal_file_name[option…]
pg_probackup catchup -b catchup_mode —source-pgdata=path_to_pgdata_on_remote_server —destination-pgdata=path_to_local_dir [option…]fig=/opt/pg151/bin top_srcdir=/home/pg15/postgresql-15.1 install

四:备份命令解释

1、pg_probackup help [COMMAND]

显示帮助命令

2、pg_probackup version

查看pg_probackup版本

3、pg_probackup init -B backup-path

可以在操作系统层面指定BACKUP_PATH,指定都,再次运行该命令则可以省略选项
参数解释
-B,—backup-path 指定数据的备份存储目录【支持环境变量BACKUP_PATH】

实操:

[pg15@172 pgsql]$ pg_probackup init -B /data/pgsql/pgbackup/

INFO: Backup catalog ‘/data/pgsql/pgbackup’ successfully inited

4、pg_probackup add-instance -B backup-path -D pgdata-path

—instance=instance_name
[-E external-directory-path]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]
一个备份目录中可以添加多个备份实例,可以是本地备份实例也可以是远程备份实例

参数解释:
-B,—backup-path 指定备份目录
-D,—pgdata 指定数据库目录
—instance 指定备份实例名
-E,—external-dirs 备份时从数据库目录中排出哪些目录不进行备份 EG —external-dirs=/tmp/dir1:/tmp/dir2
远程选项:
—remote-proto 指定远程连接协议,默认SSH 选项:【ssh,none】
—remote-host 指定远程连接的IP【远程postgres主机IP地址】
—remote-port 指定远程连接的端口【远程postgres主机的端口,默认:22】
—remote-path 指定远程主机pg_probackup的路径
—remote-user 指定远程连接的用户名
—ssh-options 其他ssh选项

添加本地实例

pg_probackup add-instance -B /archivelog/backup -D /data/pg132 —instance=pg_test
archive_command=’/usr/bin/pg_probackup archive-push -B /archivelog/wal —instance=pg_test —wal-file-path=%p —wal-file-name=%f’
添加远程备份实例[即:在本地服务器上对远程的postgres进行备份]
pg_probackup add-instance -B /archivelog/backup -D /data/pg132 —instance=pg_test_remote —remote-proto=ssh —remote-host=192.168.21.145 —remote-port=22 —remote-path=/usr/bin —remote-user=postgres
archive_command=’/usr/bin/pg_probackup archive-push -B /archivelog/wal —instance=pg_test_remote —wal-file-path=%p —wal-file-name=%f —remote-proto=ssh —remote-host=192.168.21.145 —remote-port=22 —remote-path=/usr/bin —remote-user=postgres’

实操:

[pg15@172 pgbackup]$ pg_probackup add-instance -B /data/pgsql/pgbackup/ -D /data/pgsql/151/data/ —instance=probackuptest
INFO: Instance ‘probackuptest’ successfully inited
[pg15@172 pgbackup]$
[pg15@172 pgbackup]$
[pg15@172 pgbackup]$ ls
backups wal
[pg15@172 pgbackup]$ cd backups/
[pg15@172 backups]$ ls
probackuptest

5、pg_probackup del-instance -B backup-path —instance=instance_name

删除一个备份实例

参数解释:

-B,—backup-path 备份存储目录
—instance 指定要删除的备份实例名

实操:

[pg15@172 backups]$ pg_probackup del-instance -B /data/pgsql/pgbackup/ —instance probackuptest
INFO: Instance ‘probackuptest’ successfully deleted
[pg15@172 backups]$ ls
[pg15@172 backups]$ ll
total 0

6、pg_probackup set-config -B backup-path —instance=instance_name

[-D pgdata-path]
[-E external-directories-paths]
[—restore-command=cmdline]
[—log-level-console=log-level-console]
[—log-level-file=log-level-file]
[—log-format-file=log-format-file]
[—log-filename=log-filename]
[—error-log-filename=error-log-filename]
[—log-directory=log-directory]
[—log-rotation-size=log-rotation-size]
[—log-rotation-age=log-rotation-age]
[—retention-redundancy=retention-redundancy]
[—retention-window=retention-window]
[—wal-depth=wal-depth]
[—compress-algorithm=compress-algorithm]
[—compress-level=compress-level]
[—archive-timeout=timeout]
[-d dbname] [-h host] [-p port] [-U username]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]

为指定的备份实例设置相关参数,方便在backup时不用在输入相关选项,用于backup\checkdb

参数解释:

-B,—backup-path 指定备份目录
—instance 指定备份实例名
-D,—pgdata 指定数据库目录
-E,—external-dirs 排除指定的目录;EG:—external-dirs=/tmp/dir1:/tmp/dir2
—restore-command 用于recovery.conf中的restorecommand;none表示禁用
日志选项:
log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]
log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]
log-format-file 日志文件记录格式,默认:plain,可选值:plain,json
log-filename 备份日志文件名默认:pg_probackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式
—error-log-filename 错误日志文件名
log-directory 备份日志目录,默认$BACKUP_PATH/log
log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d
log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB

保留策略选项:

—retention-redundancy 备份保留的天数
—retention-window 备份至少可以恢复到几天内的任意时间点
—wal-depth 能够执行时间点恢复的最新有效备份数;默认0,表示禁用
压缩选项:
—compress 等价与—compress-algorithm=zlib —compress-level=1
—compress-algorithm 数据库压缩类型:zlib,pglz,none,默认:none
—compress-level 压缩级别【0-9】,默认:1
归档选项:
—archive-timeout 等待WAL归档的超时时间(和postgresql中的archive_command不一样,PG中表示超过多长时间后,强制WAL切换)
连接选项:
-U,—pguser 连接数据库的用户
-d,—pgdatabase 连接数据库的默认数据库
-h,—pghost 连接数据库的IP地址
-p,—pgport 连接数据库的端口
远程连接选项:
—remote-proto 指定远程连接协议,默认SSH 选项:【ssh,none】
—remote-host 指定远程连接的IP【远程postgres主机IP地址】
—remote-port 指定远程连接的端口【远程postgres主机的端口,默认:22】
—remote-path 指定远程主机pg_probackup的路径
—remote-user 指定远程连接的用户名
—ssh-options 其他ssh选项
远程WAL归档选项:
—archive-host SSH连接到归档主机的IP或主机名
—archive-port SSH连接到归档主机的端口
—archive-user SSH连接到归档主机的用户
从Standby备份选项【不推荐使用】:
—master-db 指定要连接的主服务器上的数据库名称
—master-host 指定运行主服务器的主机名或IP
—master-port 指定主服务器正在监听的TCP端口或本地UNIX套接字
—master-user 指定连接用户名
—replica-timeout 通过复制进行WAL段流式传输的等待时间。默认300s,单位秒

实操:

[pg15@172 ~]$ pg_probackup set-config -B /data/pgsql/pgbackup -D /data/pgsql/151/data —instance probackuptest —log-level-console=INFO —log-level-file=INFO —log-format-file=plain —log-filename=pg_probackup-%a.log —error-log-filename=pg_probackup_error-%a.log —log-directory=/data/pgsql/pgbackup/logs —log-rotation-size=0 —log-rotation-age=1d —compress-algorithm=zlib —compress-level=5 —retention-redundancy=2 —retention-window=2 —archive-timeout=30
[pg15@172 ~]$

7、pg_probackup set-backup -B backup-path —instance=instance_name
-i back
up-id [—ttl=interval] [—expire-time=timestamp]
[—note=text]

参数解释:

-B,—backup-path 备份存储目录
—instance 备份实例名cd
—ttl 指定备份的固定时间,支持单位ms,s,min,h,d默认:s
—expire-time 指定备份过期时间
—note=text 对备份进行文本注释,文本注释大小为1KB

8、pg_probackup show-config -B backup-path —instance=instance_name
[—form
at=format]

参数解释:

-B,—backup-path 指定备份目录
—instance 指定备份实例名
—format 支持内容输出格式,默认为plain,可选plain,json

实操:

[pg15@172 ~]$ pg_probackup show-config -B /data/pgsql/pgbackup/ —instance=probackuptest —format=json
{
“pgdata”: “/data/pgsql/151/data”,
“system-identifier”: “7174282308086276304”,
“xlog-seg-size”: “67108864”,
“pgdatabase”: “postgres”,
“replica-timeout”: “5min”,
“archive-timeout”: “30s”,
log-level-console”: “INFO”,
log-level-file”: “INFO”,
log-format-console”: “PLAIN”,
log-format-file”: “PLAIN”,
log-filename”: “pg_probackup-%a.log”,
“error-log-filename”: “pg_probackup_error-%a.log”,
log-directory”: “/data/pgsql/pgbackup/logs”,
log-rotation-size”: “0TB”,
log-rotation-age”: “1d”,
“retention-redundancy”: “2”,
“retention-window”: “2”,
“wal-depth”: “0”,
“compress-algorithm”: “zlib”,
“compress-level”: “5”,
“remote-proto”: “ssh”
}

9、pg_probackup show -B backup-path

[—instance=instance_name [-i backup-id]]
[—format=format] [—archive]

该命令用于显示备份集,以及指定实例的备份集

参数解释:

-B,—backup-path 指定备份目录
—instance 指定备份实例名
-i,—backup-id 指定备份集ID
—archive 显示WAL存档信息
—format 结果输出格式:plain或json;默认:plain
—no-color 在控制台中禁用错误和警告消息着色

实操:

pg_probackup show -B /data/pgsql/pgbackup/ —instance probackuptest —format plain
Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status

probackuptest 15 RMZR2F 2022-12-16 10:59:04-05 FULL STREAM 2/0 10s 7618kB 64MB 2.99 0/28000028 0/280001A0 OK
probackuptest 15 RMZQZ7 2022-12-16 10:57:08-05 FULL STREAM 2/0 10s 7607kB 64MB 2.99 0/20000060 0/200001A0 OK

解释:

Instance:备份实例名,即add-instance时指定的—instance的值

Version:PostgreSQL主版本

ID:备份标识ID

Recovery Time:最早可以恢复数据库集群的状态时刻

Mode:备份方式。【FULL、PAGE、DELTA、PTRACK】

WAL Mode:WAL传送方式。可能的值:STREAM和ARCHIVE

TLI:当前备份及其父级的时间轴,即timeline

Time:执行备份所花费的时间

Data:备份中数据文件的大小,不包含WAL大小。对于STREAM备份,可以将备份的总大小计算为Data+WAL

WAL:恢复过程中需要应用WAL的大小(未压缩),以使备份达到一致性

Zratio: 压缩比:未压缩字节/压缩字节

Start Lsn:备份开始时对应的WAL日志序列号。恢复过程开始的REDO点

Stop Lsn:备份结束时的WAL日志序列号

Status:备份状态

OK 备份时完整且有效的

DONE 备份已完成,但尚未验证

RUNNING 正在进行备份

MERGING 备份正在合并

MERGED 备份数据文件已经成功合并,但是元数据正在更新中。只有完全备份可有具有此状态

DELETING 正在删除备份文件

CORRUPT 备份文件已损坏

ERROR 由于意外错误,备份已终止

ORPHAN 备份无效,因为其父备份之一已损坏或丢失

仅当备份状态为OK或DONE时,才可以从备份还原集群

10、pgprobackup backup -B backup-path -b backup-mode —instance=instance_name

[-D pgdata-path] [-C]
[—stream [-S slot-name] [—temp-slot]]
[—backup-pg-log] [-j num-threads] [—progress]
[—no-validate] [—skip-block-validation]
[—external-dirs=external-directories-paths]
[—no-sync]
[—log-level-console=log-level-console]
[—log-level-file=log-level-file]
[—log-format-console=log-format-console]
[—log-format-file=log-format-file]
[—log-filename=log-filename]
[—error-log-filename=error-log-filename]
[—log-directory=log-directory]
[—log-rotation-size=log-rotation-size]
[—log-rotation-age=log-rotation-age] [—no-color]
[—delete-expired] [—delete-wal] [—merge-expired]
[—retention-redundancy=retention-redundancy]
[—retention-window=retention-window]
[—wal-depth=wal-depth]
[—compress]
[—compress-algorithm=compress-algorithm]
[—compress-level=compress-level]
[—archive-timeout=archive-timeout]
[-d dbname] [-h host] [-p port] [-U username]
[-w —no-password] [-W —password]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]
[—ttl=interval] [—expire-time=timestamp] [—note=text]
[—help]

备份选项参数解释:

-B,backup-path 指定备份目录

-b,—backup-mode 备份模式:FULL[完整备份]
DELTA[读取数据目录中的所有数据文件,为自上次备份以来已更改页面创建增量备份]

PAGE[基于自上次执行完整备份或增量备份以来生成的WAL文件创建增量备份。从数据文件中仅读取已更改的块]

TRACK[动态创建增量备份跟踪页面更改]

—instance 备份实例名

-D,—pgdata 数据目录

-C,—smooth-checkpoint 在备份之前执行一次checkpoint

—stream 使用流式备份时一起备份事务日志

-S,—slot 使用的复制槽

—temp-slot 使用临时复制槽

—backup-pg-log 备份PG的log目录

-j,—threads 并行备份的进程数

—progress 显示备份进度

—no-validate 备份结束后,不执行备份校验,需要在备份结束后,手工执行校验

—skip-block-validation 跳过数据块基本校验,仅执行文件解包数据校验
-E,—external-dirs 从数据文件目录中备份时排除指定的目录 EG -E=/tmp/dir1:/tmp/dir2

—no-sync 不将备份文件同步到磁盘

—note=text 为备份添加标签 eg:—node=’backup before app update to v13.1’
日志选项参数解释:

log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]

log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]

log-format-console 控制台日志输出格式,默认:plain,可选:plain,json

log-format-file 日志文件内容输出格式,默认:plain,可选:plain,json

log-filename 备份日志文件名默认:pg_probackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式

—error-log-filename 备份发生错误时的日志文件名

log-directory 备份日志目录,默认$BACKUP_PATH/log

log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d

log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB
备份保留策略参数:

—delete-expired 成功完成备份后,根据当前保留策略删除过期备份

—merge-expired 将满足保留策略要求的最旧的增量备份与其已经过期的父级备份合并

—delete-wal 删除不再需要从任何现有备份中还原集群所需的WAL文件

—retention-redundancy 保留的完整备份个数,默认0,所有完整备份都一直保留

—retention-window 可以恢复多少天之前的备份

—wal-depth 每个时间线必须保留执行PITR能力的最新有效备份数;0表示禁用;默认:0

—dry-run 尝试运行备份,不作任何修改

—ttl=interval 如果需要的将某些备份保留的时间超过已建立的保留策略所允许的时间,则可以将其固定任意时间,取消固定备份,将其设置为0

—expire-time 指定备份的到期时间
备份压缩选项参数:

—compress 等价于—compress-algorithm=’zlib’ —compress-level=1

—compress-algorithm 指定备份压缩方式,zlib,pglz,none 默认:none

—compress-level 指定备份压缩级别[0-9]默认1

归档参数选项:

—archive-timeout WAL归档超时时间,定义的时,WAL归档到备份目录的超时时间
数据连接参数:

-U,—pguser 连接数据库的用户

-d,—pgdatabase 要连接的数据库

-h,—pghost 要连接的IP或SOCKET

-p,—pgport 数据库端口,默认5432

-w,—no-password 不提示输入密码

-W,—password 强制提示输入密码

远程备份参数设置:

—remote-proto 使用的远程连接协议,默认ssh 选项:[ssh、none]

—remote-host 远程主机地址或主机名

—remote-port 远程主机端口,默认22

—remote-path 远程主机上pg_probackup的路径

—remote-user 远程主机SSH连接的用户名

—ssh-options 其他的SSH连接选项,默认为NONE

从Standby备份选项【不推荐使用】:

—master-db 指定要连接的主服务器上的数据库名称

—master-host 指定运行主服务器的主机名或IP

—master-port 指定主服务器正在监听的TCP端口或本地UNIX套接字

—master-user 指定连接用户名

—replica-timeout 通过复制进行WAL段流式传输的等待时间。默认300s,单位秒

本地全量备份示例:

pg_probackup backup -B /archivelog/backup —instance=pg_test -b full -D /data/pg132 -j 8 -h 127.0.0.1 -p 5432 -d postgres -U backup
pg_probackup backup -B /archivelog/backup —instance=pg_test -b full -D /data/pg132 —stream —temp-slot —compress-algorithm=zlib —compress-level=5 —progress —threads 8 -h 127.0.0.1 -p 5432 -d postgres -U backup -W

本地增量备份示例:

pg_probackup backup -B /archivelog/backup —instance=pg_test -b delta -D /data/pg132 -j 8 —compress-algorithm=zlib —compress-level=5 -h 127.0.0.1 -p 5432 -d postgres -U postgres

远程全量备份

 —remote-host=192.168.21.145 —remote-port=22 —remote-user=postgre

实操:

[pg15@172 probackuptest]$ pgprobackup backup -B /data/pgsql/pgbackup —instance=probackuptest -b full -D /data/pgsql/151/data -C —backup-pg-log -j 2 —stream —log-level-console=info —log-level-file=info —log-format-file=plain —log-filename=pg_probackup%a.log —error-log-file=pgprobackup_error%a.log —log-directory=/data/pgsql/pgbackup/logs —log-rotation-size=0 —log-rotation-age=1d —delete-expired —merge-expired —delete-wal —retention-redundancy=2 —retention-window=2 —compress -U postgres -h 127.0.0.1 -p 5432 -d postgres
INFO: Backup start, pg_probackup version: 2.5.11, instance: probackuptest, backup ID: RMZR2F, backup mode: FULL, wal mode: STREAM, remote: false, compress-algorithm: zlib, compress-level: 5
INFO: This PostgreSQL instance was initialized with data block checksums. Data block corruption will be detected
WARNING: Current PostgreSQL role is superuser. It is not recommended to run pg_probackup under superuser.
INFO: Database backup start
INFO: wait for pg_backup_start()
INFO: Wait for WAL segment /data/pgsql/pgbackup/backups/probackuptest/RMZR2F/database/pg_wal/00000002000000000000000A to be streamed
INFO: PGDATA size: 22MB
INFO: Current Start LSN: 0/28000028, TLI: 2
INFO: Start transferring data files
INFO: Data files are transferred, time elapsed: 0
INFO: wait for pg_stop_backup()
INFO: pg_stop backup() successfully executed
INFO: stop_lsn: 0/280001A0
INFO: Getting the Recovery Time from WAL
INFO: Syncing backup files to disk
INFO: Backup files are synced, time elapsed: 0
INFO: Validating backup RMZR2F
INFO: Backup RMZR2F data files are valid
INFO: Backup RMZR2F resident size: 71MB
INFO: Backup RMZR2F completed
INFO: Evaluate backups by retention
INFO: Backup RMZR2F, mode: FULL, status: OK. Redundancy: 1/2, Time Window: 0d/2d. Active
INFO: Backup RMZQZ7, mode: FULL, status: OK. Redundancy: 2/2, Time Window: 0d/2d. Active
INFO: Retention merging finished
INFO: Nothing to remove on timeline 2
INFO: There are no backups to merge by retention policy
INFO: There are no backups to delete by retention policy
INFO: There is no WAL to purge by retention policy

11、pg_probackup restore -B backup-path —instance=instance_name

[-D pgdata-path] [-i backup-id] [-j num-threads]
[—progress] [—force] [—no-sync]
[—no-validate] [—skip-block-validation]
[-T OLDDIR=NEWDIR]
[—external-mapping=OLDDIR=NEWDIR]
[—skip-external-dirs]
[-X WALDIR | —waldir=WALDIR]
[-I | —incremental-mode=none|checksum|lsn]
[—db-include dbname | —db-exclude dbname]
[—recovery-target-time=time|—recovery-target-xid=xid
|—recovery-target-lsn=lsn [—recovery-target-inclusive=boolean]]
[—recovery-target-timeline=timeline]
[—recovery-target=immediate|latest]
[—recovery-target-name=target-name]
[—recovery-target-action=pause|promote|shutdown]
[—restore-command=cmdline]
[-R | —restore-as-replica]
[—primary-conninfo=primary_conninfo]
[-S | —primary-slot-name=slotname]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]
[—archive-host=hostname] [—archive-port=port]
[—archive-user=username]

恢复参数解释:

-B,—backup-path 指定备份路径
—instance 指定实例名
-D,—pgdata 指定数据恢复到的目录
-i,—backup-id 指定备份ID
-j,—num-threads 指定数据恢复的并行度
—progress 现实备份进度
—force 强制恢复,忽略还原备份文件的状态
—no-sync 不将恢复的文件同步到磁盘
—no-validate 在恢复过程中不执行校验
—skip-block-validate 跳过数据块校验,使用文件校验代替
-T,—tablespace-map=OLDDIR=NEWDIR 将表空间目录从OLDDIR替换为NEWDIR
—external-mapping=OLDDIR=NEWDIR 在恢复时,将备份中包含的外部目录从OLDDIR迁移到NEWDIR目录,双方的目录都必须是绝对路径,如果路径中包含(=),请使用反斜线对其进行转义
—skip-external-dirs=/tmp/t1,/tmp/t2 不恢复指定的目录
-X,—waldir

增量恢复参数:

-I,—increment-mode=none|checksum|lsn 如果PGDATA中的数据页有效,则重用;默认职位none
部分还原参数:
—db-include dbname 只恢复指定的数据库
—db-exclude dbname 不恢复指定的数据库
恢复目标参数:
—recovery-target-time 恢复到指定的时间点
—recovery-target-xid 恢复到指定的XID
—recovery-target-lsn 恢复到指定的LSN
—recovery-target-inclusive 指定是否包含恢复的位置
—recovery-target-timeline 恢复到指定的时间线
—recovery-target=immediate|latest 一旦恢复达到一致性状态,则尽可能地结束恢复
—recovery-target-name 恢复到指定名字的还原点
—recovery-target-action 恢复到指定的位置后的工作,默认pause;选项[pause/promote/shutdown]
—restore-command 恢复命令

Standby参数解释:

-R,—restore-as-replica 恢复作为一个standby
—primary-conninfo 设置standby链接到master的连接信息
-S,—primary-slot-name=slotname 指定流复制使用的插槽名称
日志参数选项:
log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]
log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]
log-format-console 控制台日志输出格式,默认:plain,可选:plain,json
log-format-file 日志文件内容输出格式,默认:plain,可选:plain,json
log-filename 备份日志文件名默认:pg_probackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式
—error-log-filename 恢复数据库时的错误日志文件名
log-directory 备份日志目录,默认$BACKUP_PATH/log
log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d
log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB
—no-color 在控制台中禁用错误和警告消息着色

远程恢复参数解释:

—remote-prote=ssh 默认ssh [ssh,none]
—remote-host 远程主机IP
—remote-port 远程主机port
—remote-path 远程主机上pg_probackup的路径
—remote-user 连接远程主机的用户名
—ssh-options
远程WAL归档选项:
—archive-host 提供命令中—remote-host选项的参数archive-get
—archive-port 提供命令中—remote-port选项的参数archive-get,默认22
—archive-user 提供命令中—remote-user选项的参数archive-get。默认postgres;如果省略,则是启动postgresql的用户

实操:

测试:
postgres=# create table t1(id int);
CREATE TABLE
postgres=# insert into t1 select 1;
INSERT 0 1
postgres=# insert into t1 select 2;
INSERT 0 1
postgres=# insert into t1 select 3;
INSERT 0 1
postgres=# insert into t1 select 4;
INSERT 0 1
postgres=# insert into t1 select 5;
INSERT 0 1
postgres=# insert into t1 select 6;
INSERT 0 1
postgres=# insert into t1 select 7;
INSERT 0 1
postgres=# insert into t1 select 8;
INSERT 0 1
postgres=# insert into t1 select 9;
INSERT 0 1
postgres=# insert into t1 select 10;
INSERT 0 1
postgres=#
postgres=#
postgres=# select now();

              now              

2022-12-17 21:14:06.037117+08
(1 row)

postgres=#
postgres=#
postgres=# delete from t1;
DELETE 10
postgres=# select pg_switch_wal();
pg_switch_wal

0/300075E0
(1 row)

postgres=# select pg_switch_wal();
pg_switch_wal

0/34000078
(1 row)

postgres=# select pg_switch_wal();
pg_switch_wal

0/38000000
(1 row)

postgres=# select pg_switch_wal();
pg_switch_wal

0/38000000
(1 row)

要恢复到误删除数据之前,即要恢复出t1表的数据

[pg15@172 newdata]$ pg_probackup restore -B /data/pgsql/dbbackup —instance pgtest -D /data/pgsql/newdata -i RN1E1Q -j 2 —recovery-target-time=’2022-12-17 21:13:58’ —recovery-target-inclusive=true
INFO: Validating backup RN1E1Q
INFO: Backup RN1E1Q data files are valid
INFO: Backup validation completed successfully on time 2022-12-17 21:14:06+08, xid 793 and LSN 0/F0000290
INFO: Backup RN1E1Q is valid.
INFO: Restoring the database from backup at 2022-12-17 21:13:02+08
INFO: Start restoring backup files. PGDATA size: 22MB
INFO: Backup files are restored. Transfered bytes: 22MB, time elapsed: 0
INFO: Restore incremental ratio (less is better): 100% (22MB/22MB)
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapsed: 0
INFO: Restore of backup RN1E1Q completed.
[pg15@172 newdata]$ pg_ctl start -D /data/pgsql/newdata/
waiting for server to start….2022-12-17 21:18:09.935 CST ProcessStartTime=2022-12-17 21:18:09 CST,ProcessID=1418,ProcessType=postmaster,user=,client=,app= LOG: redirecting log output to logging collector process
2022-12-17 21:18:09.935 CST ProcessStartTime=2022-12-17 21:18:09 CST,ProcessID=1418,ProcessType=postmaster,user=,client=,app= HINT: Future log output will appear in directory “log”.
done
server started
[pg15@172 newdata]$ psql
psql (15.1)
Type “help” for help.

postgres=# \d
List of relations
Schema | Name | Type | Owner
————+———+———-+—————
public | t1 | table | postgres
(1 row)

postgres=# \d+
List of relations
Schema | Name | Type | Owner | Persistence | Access method | Size | Description
————+———+———-+—————+——————-+———————-+——————+——————-
public | t1 | table | postgres | permanent | heap | 8192 bytes |
(1 row)

postgres=# select * from t1;

id

1
2
3
4
5
6
7
8
9
10
(10 rows)

12、pg_probackup checkdb [-B backup-path] [—instance=instance_name]

[-D pgdata-path] [-j num-threads] [—progress]

[—amcheck] [—skip-block-validation]

[—heapallindexed] [—checkunique]

通过检测物理和逻辑损坏来验证PostgreSQL数据库集群的正确性

参数解释:

-B,—backup-path 指定备份存储目录
—instance 指定备份实例的名称
-D,—pgdata 指定数据库目录
—progress 显示进度
-j,—threads 并行线程数
—skip-block-validation 跳过文件级别数据快校验
—amcheck 如果在检查数据文件时未发现损坏,则对PostgreSQL实例执行索引的逻辑验证。您必须在数据库中安装amcheck或amchecknext扩展才能检查其索引。对于没有amcheck的数据库,将跳过索引验证
—heapallindexed 通过检查所有应建立索引的堆元组是否已经实际建立索引,可以使用该标志进行更彻底的逻辑验证,但是会增CPU、MEM和I/O消耗
—checkunique

日志选项:

log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]
log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]
log-format-console 控制台日志输出格式,默认:plain,可选:plain,json
log-format-file 日志文件内容输出格式,默认:plain,可选:plain,json
log-filename 备份日志文件名默认:pg_probackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式
—error-log-filename 恢复数据库时的错误日志文件名
log-directory 备份日志目录,默认$BACKUP_PATH/log
log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d
log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB
—no-color 在控制台中禁用错误和警告消息着色

连接选项:

-U,—pguser 连接数据库的用户
-d,—pgdatabase 连接指定的数据库
-h,—pghost 数据库主机IP
-p,—pgport 数据库端口号
-w,—no-password 连接数据库时不显示提示输入密码
-W,—password 连接数据库时提示输入密码

13、pg_probackup validate -B backup-path [—instance=instance_name]

[-i backup-id] [—progress] [-j num-threads]
[—recovery-target-time=time|—recovery-target-xid=xid
|—recovery-target-lsn=lsn [—recovery-target-inclusive=boolean]]
[—recovery-target-timeline=timeline]
[—recovery-target-name=target-name]
[—skip-block-validation]

该命令用于校验备份集的有效性,还可以校验备份集是否能够恢复到指定的位置


校验参数解释:

-B,—backup-path 指定备份存储目录
—instance 指定备份实例名
-i,—backup-id 指定具体的备份集ID
—progress 显示校验进度
-j,—threads 校验并行线程数
—recovery-target-time 指定恢复到的时间点
—recovery-target-xid 指定恢复到的XID
—recovery-target-lsn 指定恢复到的LSN
—recovery-target-inclusive 是否包含恢复到时间点、XID、LSN
—recovery-target-timeline 指定恢复到的时间线
—recovery-target-name 恢复到指定的还原点
—skip-block-validation 跳过文件级别数据快校验

日志选项:

log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]
log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]
log-format-console 控制台日志输出格式,默认:plain,可选:plain,json
log-format-file 日志文件内容输出格式,默认:plain,可选:plain,json
log-filename 备份日志文件名默认:pgprobackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式
—error-log-filename 恢复数据库时的错误日志文件名
log-directory 备份日志目录,默认$BACKUP_PATH/log
log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d
log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB
—no-color 在控制台中禁用错误和警告消息着色

实操:

验证所有备份的有效性:

[pg15@172 pgsql]$ pg_probackup validate -B /data/pgsql/dbbackup —instance pgtest
INFO: Validate backups of the instance ‘pgtest’
INFO: Validating backup RN1E1Q
INFO: Backup RN1E1Q data files are valid
INFO: Backup RN1E1Q WAL segments are valid
INFO: Validating backup RN024R
INFO: Backup RN024R data files are valid
INFO: Backup RN024R WAL segments are valid
INFO: All backups are valid

校验目前存储的备份是否可以恢复到指定的时间点

[pg15@172 pgsql]$ pg_probackup validate -B /data/pgsql/dbbackup —instance pgtest —recovery-target-time=’2022-12-17 21:13:58’
INFO: Validating backup RN1E1Q
INFO: Backup RN1E1Q data files are valid
INFO: Backup validation completed successfully on time 2022-12-17 21:14:06+08, xid 793 and LSN 0/F0000290
INFO: Backup RN1E1Q is valid.
INFO: Validate of backup RN1E1Q completed.

校验指定的备份是否有效:

[pg15@172 pgsql]$ pg_probackup validate -B /data/pgsql/dbbackup —instance pgtest -i RN1E1Q
INFO: Validating backup RN1E1Q
INFO: Backup RN1E1Q data files are valid
INFO: Backup RN1E1Q WAL segments are valid
INFO: Backup RN1E1Q is valid.
INFO: Validate of backup RN1E1Q completed.

校验指定的备份集是否能恢复到指定的时间点:

[pg15@172 pgsql]$ pg_probackup validate -B /data/pgsql/dbbackup —instance pgtest —recovery-target-time=’2022-12-17 21:13:58’ -i RN1E1Q
INFO: Validating backup RN1E1Q
INFO: Backup RN1E1Q data files are valid
INFO: Backup validation completed successfully on time 2022-12-17 21:14:06+08, xid 793 and LSN 0/F0000290
INFO: Backup RN1E1Q is valid.
INFO: Validate of backup RN1E1Q completed.

14、pg_probackup merge -B backup-path —instance=instance_name
-i backup-id [-j num-threads] [—progress]

[—no-validate] [—no-sync]
[—log-level-console=log-level-console]
[—log-level-file=log-level-file]
[—log-format-console=log-format-console]
[—log-format-file=log-format-file]
[—log-filename=log-filename]
[—error-log-filename=error-log-filename]
[—log-directory=log-directory]
[—log-rotation-size=log-rotation-size]
[—log-rotation-age=log-rotation-age]

随着您执行越来越多的增量备份,备份目录的总大小可能会大大增加。为了节省磁盘空间,可以运行merge命令,将增量备份合并到其父级完整备份中,并指定要合并的最新
增量备份的备份ID

参数解释:

-B,—backup-path 指定备份存储目录

—instance 指定备份实例名

-i,—backup-id 指定备份集ID

-j,—threads 并行运行的线程数

—progress 显示merge的进度

—no-validate 在保留合并期间禁用校验

—no-sync 不同步merge的文件到磁盘

日志选项:

log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]

log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]

log-format-console 控制台日志输出格式,默认:plain,可选:plain,json

log-format-file 日志文件内容输出格式,默认:plain,可选:plain,json

log-filename 备份日志文件名默认:pgprobackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式

—error-log-filename 恢复数据库时的错误日志文件名

log-directory 备份日志目录,默认$BACKUP_PATH/log

log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d

log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB

—no-color 在控制台中禁用错误和警告消息着色

EG:pg_probackup merge -B /archivelog/backup —instance=pg_test -i backup_id

如果指定完整备份,它将与第一个增量备份合并。如果指定增量备份,它将与它们之间的所有增量备份一起合并到其父级完整备份中。合并完成后,完全备份将吸收所有合并的数据,

增量备份将作为冗余删除

15、pg_probackup delete -B backup-path —instance=instance_name

[-i backup-id | —delete-expired | —merge-expired] [—delete-wal]
[-j num-threads] [—progress]
[—retention-redundancy=retention-redundancy]
[—retention-window=retention-window]
[—wal-depth=wal-depth]
[—no-validate] [—no-sync]

该命令用于删除备份

参数解释:

-B,—backup-path 指定备份文件存储目录
—instance 指定备份实例名
-i,—backup-id 指定备份集ID
-j,—threads 删除备份的并行线程数
—progress 显示删除备份的进度
—no-validate 在保留合并期间禁用校验
—no-sync 不同步merge的文件到磁盘

备份保留选项:

—delete-expired 根据当前的备份保留策略删除过期的备份
—merge-expired 根据当前的备份保留策略合并过期的备份
—delete-wal 从WAL归档中删除冗余的WAL
—retention-redundancy 保留几个全量备份;0表示全部保持。默认:0
—retention-windows 备份可以回到几天内的任意时间点
—wal-depth 每个时间线必须保留执行PITR能力的最新有效备份的数量
—dry-run 在没有任何更改的情况下,试运行
—status 删除指定备份状态的所有备份

日志选项:

log-level-console 控制台日志记录级别:默认info [off error warning info log verbose]
log-level-file 文件日志记录级别,默认off[默认日志输出到控制台][off error warning info log verbose]
log-format-console 控制台日志输出格式,默认:plain,可选:plain,json
log-format-file 日志文件内容输出格式,默认:plain,可选:plain,json
log-filename 备份日志文件名默认:pgprobackup.log 支持pg_probackup-%Y-%m-%d%H%M%S.log 这种格式,参考PG日志文件名格式
—error-log-filename 恢复数据库时的错误日志文件名
log-directory 备份日志目录,默认$BACKUP_PATH/log
log-rotation-age 如果文件的期限超过此值,则切换【生成】到下一个文件。默认为0min,0表示一直写入到一个文件中,支持的单位:ms/s/min/h/d
log-rotation-size 如果日志文件大小超过该值,则切换【生成】到下一个文件。默认为0kB,0表示一直写入到一个文件中,支持的单位:kB/MB/GB/TB
—no-color 在控制台中禁用错误和警告消息着色

实操:

[pg15@172 pgsql]$ pg_probackup show
BACKUP INSTANCE ‘pgtest’
Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status

pgtest 15 RN1E1Q 2022-12-17 21:13:04+08 FULL ARCHIVE 2/0 3s 7796kB 64MB 2.91 0/E4000060 0/E80000B8 OK
pgtest 15 RN024R 2022-12-17 03:58:04+08 FULL ARCHIVE 2/0 2s 7796kB 64MB 2.91 0/C8000028 0/CC0000F0 OK
[pg15@172 pgsql]$ pg_probackup delete -B /data/pgsql/dbbackup/ —instance pgtest
ERROR: You must specify at least one of the delete options: —delete-expired |—delete-wal |—merge-expired |—status |(-i, —backup-id)
[pg15@172 pgsql]$ pg_probackup delete -B /data/pgsql/dbbackup/ —instance pgtest —delete-expired —delete-wal
WARNING: Retention policy is not set
INFO: On timeline 2 WAL segments between 000000020000000000000021 and 000000020000000000000032 will be removed
INFO: Logical WAL size to remove on timeline 2 : 1088MB
INFO: Resident WAL size to free on timeline 2 : 4866kB
INFO: There are no backups to merge by retention policy
INFO: There are no backups to delete by retention policy

[pg15@172 pgsql]$ pg_probackup delete -i RN024R —instance pgtest
INFO: Resident data size to free by delete of backup RN024R : 7796kB
INFO: Delete: RN024R 2022-12-17 03:58:04+08
[pg15@172 pgsql]$ pg_probackup show
BACKUP INSTANCE ‘pgtest’
Instance Version ID Recovery Time Mode WAL Mode TLI Time Data WAL Zratio Start LSN Stop LSN Status

pgtest 15 RN1E1Q 2022-12-17 21:13:04+08 FULL ARCHIVE 2/0 3s 7796kB 64MB 2.91 0/E4000060 0/E80000B8 OK
[pg15@172 pgsql]$

16、pg_probackup archive-push -B backup-path —instance=instance_name

—wal-file-name=wal-file-name
[—wal-file-path=wal-file-path]
[-j num-threads] [—batch-size=batch_size]
[—archive-timeout=timeout]
[—no-ready-rename] [—no-sync]
[—overwrite] [—compress]
[—compress-algorithm=compress-algorithm]
[—compress-level=compress-level]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]

参数解释:

-B,—backup-path 指定备份存储目录
—instance 指定备份实例的名称
—wal-file-name 复制到归档目录的文件名称
—wal-file-path WAL归档的相对目标路径
-j,—threads 并行归档的线程数
—batch-size 为了加快归档速度,该选项可以指定大小进行批量复制WAL段
—archive-timeout wal归档超时时间
—no-ready-rename 不重命名archive_status目录下的”.ready”文件
—no-sync 不同步WAL文件到磁盘
—overwrite 覆盖写归档的WAL文件

压缩选项:

—compress 等价与—compress-algorithm=zlib —compress-level=1
—compress-algorithm 压缩算法:zlib,pglz,none 默认:zlib
—compress-level 压缩级别:0-9;默认:1

远程选项:

—remote-prote=ssh 默认ssh [ssh,none]
—remote-host 远程主机IP
—remote-port 远程主机port
—remote-path 远程主机上pg_probackup的路径
—remote-user 连接远程主机的用户名
—ssh-options

17、pg_probackup archive-get -B backup-path —instance=instance_name

—wal-file-name=wal-file-name
[—wal-file-path=wal-file-path]
[-j num-threads] [—batch-size=batch_size]
[—no-validate-wal]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]

参数解释:

-B,—backup-path 指定备份存储目录
—instance 指定备份实例的名称
—wal-file-name 复制到归档目录的文件名称
—wal-file-path WAL归档的相对目标路径
-j,—threads 并行归档的线程数
—batch-size 为了加快归档速度,该选项可以指定大小进行批量复制WAL段

—prefetch-dir 存储预取WAL文件的位置

—no-validate-wal 在使用预取的WAL之前跳过校验

远程选项:

—remote-prote=ssh 默认ssh [ssh,none]
—remote-host 远程主机IP
—remote-port 远程主机port
—remote-path 远程主机上pg_probackup的路径
—remote-user 连接远程主机的用户名
—ssh-options

18、pg_probackup catchup -b catchup-mode

source-pgdata=path_to_pgdata_on_remote_server
—destination-pgdata=path_to_local_dir
[—stream [-S slot-name]] [—temp-slot | —perm-slot]
[-j num-threads]
[-T OLDDIR=NEWDIR]
[—exclude-path=path_prefix]
[-d dbname] [-h host] [-p port] [-U username]
[-w —no-password] [-W —password]
[—remote-proto] [—remote-host]
[—remote-port] [—remote-path] [—remote-user]
[—ssh-options]
[—dry-run]
[—help]

参数解释:

-b,—backup-mode catchup的模式:FULL|DELTA|PTRACK
—stream 流式传输事务日志(只支持该模式)
-S,—slot 使用的复制槽名称
—temp-slot 是否使用临时复制槽
-P,—perm-slot 是否创建永久复制槽
-j,—threads catchup使用的并行线程数
-T,—tablespace-mapping=OLDDIR=NEWDIR 将表空间从目录OLDDIR重新定位到NEWDIR
-x,—exclude-path=path_prefix 具有path_prefix(相对于pgdata)的文件将被排除在catchup之外(可以多次使用)危险选项!使用风险自负

连接选项:

-U,—pguser 连接数据库的用户
-d,—pgdatabase 连接指定的数据库
-h,—pghost 数据库主机IP
-p,—pgport 数据库端口号
-w,—no-password 连接数据库时不显示提示输入密码
-W,—password 连接数据库时提示输入密码

远程选项:

—remote-prote=ssh 默认ssh [ssh,none]
—remote-host 远程主机IP
—remote-port 远程主机port
—remote-path 远程主机上pg_probackup的路径
—remote-user 连接远程主机的用户名
—ssh-options SSH连接使用的其他选项
—dry-run 在没有任何更改的情况下,试运行

点击此处阅读原文

↓↓↓

文章转载自开源软件联盟PostgreSQL分会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论