暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

PostgreSQL备份恢复(pg_probackup)

tigerdog 2024-02-07
971

一、概述简介

    pg_probackup是俄罗斯公司PostgresPro(https://postgrespro.com/)研发的PostgreSQL备份和恢复工具,开源免费;用于执行PostgreSQL实例的定期备份(包括数据文件备份和wal日志归档)。

    pg_probackup支持在一个文件目录下备份多个实例的多个备份(全量或增量),支持备份留存周期和窗口天数定义,用于过期备份的删除或合并。

功能特性:

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

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

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

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

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

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

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

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

    9、支持对备份集的管理

    10、支持并行恢复

使用限制:

    1、仅支持PostgreSQL 9.5以上版本进行备份和还原

    2、远程备份和还原,不支持windows系统

    3、备份实例和被备份实例需要遵循pg_probackup的语义版本管理,兼容的版本(即major相同的版本向后兼容)之间才支持备份和恢复

    4、备份工具与被备份实例必须配置一致的block_size、wal_block_size,否则无法执行备份(可在安装包源码编译时设置: --with-wal-blocksize=8 --with-blocksize=8)

    4、pg_probackup支持备份HA Primary以及Standby实例

    6、对备份数据库文件大小的限制是:4G,超出则不支持(备份是会校验失败,恢复时会丢数据)

备份模式(-b backup-mode)

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

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

        delta模式:在该模式下,pg_probackup会扫描所有的数据目录文件,然后将上一次备份后发生改变的数据页进行拷贝备份。这种模式下增量备份的IO消耗(读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更快,但是由于需要实时跟踪发生变化的数据页,所以对源端数据库服务器有一定的资源消耗(需要设置:CREATE EXTENSION ptrack;启用跟踪页面更新:ptrack.map_size)。

常规使用步骤:

    1、创建备份用户,并授权

    2、初始化备份目录

    3、添加备份实例(删除备份实例)

    4、为备份实例进行相关配置(可选)

    5、执行备份操作

    6、执行备份校验

    7、删除过期备份

二、安装部署

    pg_probackup支持rpm和源码编译安装。

RPM安装

    #RPM Centos Packages(#兼容PostgreSQL 9.6,10,11,12,13,14,15,16)

    rpm -ivh https://repo.postgrespro.ru/pg_probackup/keys/pg_probackup-repo-centos.noarch.rpm

    yum install pg_probackup-{16,15,14,13,12,11,10}

    yum install pg_probackup-{16,15,14,13,12,11,10}-debuginfo

源码编译安装

    源码下载:https://gitee.com/mirrors/pg_probackup/tree/2.5.13/

    tar -xzvf pg_probackup-2.5.13.tar.gz

    cd pg_probackup-2.5.13

    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源码所在路径

    官方文档:https://postgrespro.com/docs/postgrespro/15/app-pgprobackup

例如:

    make USE_PGXS=1 pg_config=/usr/local/pgsql/bin top_srcdir=/opt/pgsql/postgresql-15.3

    make USE_PGXS=1 pg_config=/usr/local/pgsql/bin top_srcdir=/opt/pgsql/postgresql-15.3 install

    或者直接解压到源码contrib目录后编译安装,如下所示:

    tar -xvf pg_probackup-2.5.13.tar.gz -C /opt/pgsql/postgresql-15.3/contrib

    cd /opt/pgsql/postgresql-15.3/contrib/pg_probackup-2.5.13

    make && make install

三、备份示例

    验证备份及恢复操作。

1、准备备份服务器

    执行备份恢复前需进行如下相关配置:

1.1、数据库实例配置

    建议initdb时使用--data-checksums选项,否则备份会告警(不影响使用)。

创建备份用户(for pg10+):

    #不建议直接使用超级用户如postgres

    create role backupuser with login replication;

    grant usage on schema pg_catalog to backupuser;

    grant execute on function pg_catalog.current_setting(text) to backupuser;

    grant execute on function pg_catalog.set_config(text, text, boolean) to backupuser;

    grant execute on function pg_catalog.pg_is_in_recovery() to backupuser;

    grant execute on function pg_catalog.pg_start_backup(text, boolean, boolean) to backupuser;

    grant execute on function pg_catalog.pg_stop_backup(boolean, boolean) to backupuser;

    grant execute on function pg_catalog.pg_create_restore_point(text) to backupuser;

    grant execute on function pg_catalog.pg_switch_wal() to backupuser;

    grant execute on function pg_catalog.pg_last_wal_replay_lsn() to backupuser;

    grant execute on function pg_catalog.txid_current() to backupuser;

    grant execute on function pg_catalog.txid_current_snapshot() to backupuser;

    grant execute on function pg_catalog.txid_snapshot_xmax(txid_snapshot) to backupuser;

    grant execute on function pg_catalog.pg_control_checkpoint() to backupuser;

    alter user backupuser encrypted password 'backupuser';

pg_hba.conf参数配置

    #配置流复制备份用户,replication不能配置成all

        host replication backupuser IP/32 md5

postgresql.conf参数配置

    #确保 wal_level 参数值大于minimal

        wal_level = replica

    #设置归档模式(off:关闭归档,on:开启归档,但不允许在recovery模式下进行归档,always:开启归档,且允许在recovery模式下进行归档[备份standby实例时需设置为always])

        archive_mode = on

    #自动归档的间隔时间,单位为秒,默认5分钟,建议1分钟左右

        archive_timeout =300

    #备份前必须配置archive_command才能备份实例

        archive_command = 'pg_probackup archive-push -B /data/pgbackup --instance=备份实例名 --wal-file-path=%p --wal-file-name=%f --remote-path=/usr/local/pgsql/bin --remote-user=backupuser --remote-host=backup_sever_ip --overwrite'

    #恢复后必须配置restore_command才能启动实例服务(注意restore_command中的--remote-path指的是被还原实例本地的$PGHOME/bin)

        restore_command = 'pg_probackup archive-get -B /data/pgbackup --instance=instanceName --wal-file-path=%p --wal-file-name=%f --remote-path=/usr/local/pgsql/bin --remote-user=backupuser --remote-host=backup_sever_ip'

    注:以上remote-打头配置项是备份服务器,实例修改配置后需要重启服务(因为archive_command和restore_command重载无法生效,必须重启),保证配置生效;

1.2、服务器主机配置

备份恢复实例所在服务器需要保持时区一直、时间同步:

    查看时区:date -R

    时间同步可使用ntp或chrony(建议)

备份服务器主机与被备份实例主机之间建立SSH免密登录:

    ssh-keygen -t rsa

    ssh-copy-id backupuser@instance_server_ip

    ssh backupuser@instance_server_ip

    #此处的IP地址可根据$PGHOST设置而定

免密SSH登录用户连接数限制:

    -j 参数可以指定并发数,在CPU允许的情况下若超过10个并发数会存在如下报错

    ssh_exchange_identification: Connection closed by remote host

    如下配置:

        MaxSessions 10

        MaxStartups 10:30:90

    三元组形式:10:30:90

        10:当连接数达到10时就开始拒绝连接,不过不是全部拒绝

        30:当连接数到达10时,之后的连接有30%的概率被拒绝

        90:当连接数达到100时,之后的连接就全部拒绝

    根据实际并发度调整数值

    vi /etc/ssh/sshd_config

        MaxSessions 30

        MaxStartups 30:30:100

    重启服务生效

        systemctl restart sshd (service sshd restart)

1.3、创建备份目录(初始化)

创建本地备份目录

    mkdir -p /data/pgbackup

    chown -R postgres.postgres /data/pgbackup

初始化备份目录(在备份目录下自动创建backups和wal目录)

    pg_probackup init -B /data/pgbackup

1.4、创建备份实例(mybackup1)

    pg_probackup add-instance -B /data/pgbackup --instance=mybackup1

    执行创建备份实例后,将在backups和wal目录下分别生成实例名子目录

    

    查看备份实例:pg_probackup show -B /data/pgbackup

    

2、全量备份恢复

    全量备份恢复步骤如下:

配置项修改如下

    

创建测试数据

    create database testdb;

    \c testdb;

    create table t1(id serial primary key, name varchar(30), create_time timestamp default now());

    insert into t1(name) select '用户-' || n from generate_series(1,10000) n;

    

执行全量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup1 -b full --stream

    #使用pg_probackup备份,所有的归档日志都存储在pg_wal目录下,旧的段在被归档之前不能被删除或回收,直到它们被归档,否则在backup时使用--stream选项。

    

查看备份信息

    pg_probackup show -B /data/pgbackup

    

执行全量恢复

    pg_ctl stop

    rm -rf $PGDATA/*

    pg_probackup restore -B /data/pgbackup --instance=mybackup1

    

验证恢复数据

    

3、增量备份恢复

    增量备份恢复步骤如下:

新增测试数据

    insert into t1 (name) select n || '增量备份' from generate_series(10001, 10010) n;

    select * from t1 where id >= 10011;

    select pg_switch_wal();

执行增量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup1 -b page --stream

    

查看备份信息

    pg_probackup show -B /data/pgbackup --instance=mybackup1

    

执行增量量恢复

    pg_ctl stop

    rm -rf $PGDATA/*

    pg_probackup restore -B /data/pgbackup --instance=mybackup1 -i S8F3X6

    

    注:直接指定要恢复的增量备份集ID,恢复时自动寻找其依赖的全量备份集进行恢复。

验证恢复数据

    

4、基于指定时间点的恢复

    恢复到指定时间点,通过参数 --recovery-target-time=time 指定恢复的具体时间点。

创建测试数据

    insert into t1 (name) select n || '恢复到指定时间点' from generate_series(10021, 10025) n;

    

记录当前时间(恢复时间点)

    

在新增部分记录

    insert into t1 (name) select n || '恢复时间点之后记录' from generate_series(10026, 10030) n;

    select * from t1 where id >= 10021;

    

执行增量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup1 -b page --stream

    

查看备份集信息

    pg_probackup show -B /data/pgbackup --instance=mybackup1

    

恢复到指定时间点(2024-02-06 13:33:31.693122+08)

    pg_ctl stop

    rm -rf $PGDATA/*

    pg_probackup restore -B /data/pgbackup --instance=mybackup1 --recovery-target-time='2024-02-06 13:33:31'

    

验证恢复数据

    select * from t1 where id > 10021;

    

    注:时间点:2024-02-06 13:33:31 之后插入的5条记录没有恢复。

5、基于指定LSN的恢复

    恢复到指定LSN,通过参数 --recovery-target-lsn=lsn 指定恢复的具体LSN位置。

先恢复到最后次增量备份(完整数据记录)

    pg_probackup restore -B /data/pgbackup --instance=mybackup1 -i S8F6T9

    

查看已有数据

    select * from t1 where id > 10020;

    

新增测试数据

    #select pg_wal_replay_resume();

    新增本次增量数据

    insert into t1 (name) select n || '恢复到指定LSN' from generate_series(10031, 10035) n;

    

记录当前LSN

    select pg_current_wal_lsn();

    

    0/29002CB0

在新增部分记录

    insert into t1 (name) select n || '恢复LSN点之后记录' from generate_series(1, 5) n;

    select * from t1 where id >= 10031;

    

执行增量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup1 -b page --stream

    

查看备份集信息

    pg_probackup show -B /data/pgbackup --instance=mybackup1

    

恢复到指定LSN点(0/29002CB0

    pg_ctl stop

    rm -rf $PGDATA/*

    pg_probackup restore -B /data/pgbackup --instance=mybackup1 --recovery-target-lsn='0/29002CB0'

    

验证恢复数据

    select * from t1 where id >= 10031;

        

    注:LSN点:0/29002CB0 之后插入的5条记录没有恢复。

6、基于指定XID的恢复

    恢复到指定XID,通过参数 --recovery-target-xid=xid 指定恢复的具体XID位置。

先恢复到最后次增量备份(完整数据记录)

    pg_probackup restore -B /data/pgbackup --instance=mybackup1 -i S8F9II

    

查看已有数据

    select * from t1 where id >= 10031;

    

新增测试数据

    #select pg_wal_replay_resume();

    新增本次增量数据

    insert into t1 (name) select n || '恢复到指定XID' from generate_series(10041, 10045) n;

    select * from t1 where id >= 10041;

    

记录当前XID

    select txid_current();

    

    XID=765

在新增部分记录

    insert into t1 (name) select n || '恢复XID点之后记录' from generate_series(1, 5) n;

    select * from t1 where id >= 10041;

    

执行增量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup1 -b page --stream

    

查看备份集信息

    pg_probackup show -B /data/pgbackup --instance=mybackup1

    

恢复到指定XID点(765)

    pg_ctl stop

    rm -rf $PGDATA/*

    pg_probackup restore -B /data/pgbackup --instance=mybackup1 --recovery-target-xid='765'

    

验证恢复数据

    select * from t1 where id >= 10041;

    

    注:LSN点:765 之后插入的5条记录没有恢复。

7、基于指定恢复点的恢复

    恢复到指定名称恢复点,通过参数 --recovery-target-name=name 指定恢复的具体恢复位置。

新建备份实例(mybackup2)

    pg_probackup add-instance -B /data/pgbackup --instance=mybackup2

执行全量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup2 -b full --stream

    

查看备份集信息

    pg_probackup show -B /data/pgbackup --instance=mybackup2

    

查看已有数据

    select count(1), min(id), max(id) from t1;

    

新增测试数据

    新增本次增量数据

    insert into t1 (name) select n || '恢复到指定名称恢复点' from generate_series(10001, 10005) n;

    select * from t1 where id >= 10001;

    

创建指定名称恢复点

    select pg_create_restore_point('my_restore_point1');

    checkpoint;

    select pg_switch_wal();

    

在新增部分记录

    insert into t1 (name) select n || '恢复点名称之后记录' from generate_series(1, 5) n;

    select * from t1 where id >= 10001;

    

执行增量备份

    pg_probackup backup -B /data/pgbackup --instance=mybackup2 -b page --stream

    

查看备份集信息

    pg_probackup show -B /data/pgbackup --instance=mybackup2

    

恢复到指定名称恢复点(my_restore_point1)

    pg_ctl stop

    rm -rf $PGDATA/*

    pg_probackup restore -B /data/pgbackup --instance=mybackup2 --recovery-target-name='my_restore_point1' –-recovery-target-inclusive=true

    

验证恢复数据

    select * from t1 where id >= 10001;

    

    注:指定名称恢复点之后插入的5条记录没有恢复。

四、命令汇总

    执行 pg_probackup --help 可以查询到命令汇总信息,相关命令如下:

help

    pg_probackup help [COMMAND]

    显示帮助命令,help+command显示具体命令语法,如:pg_probackup help init

version

    pg_probackup version

    查看pg_probackup版本

    


init

    pg_probackup init -B backup-path

    初始化备份目录,执行该命令后在指定目录下创建backups和wal两个子目录

    可以在操作系统层面指定BACKUP_PATH环境变量,在运行该命令则可以省略选项

参数解释

    -B,--backup-path指定数据备份存储根目录(支持环境变量BACKUP_PATH)

实例:

    [postgres@YCPC pgbackup]$ pg_probackup init -B /data/pgbackup/

    


set-config

    pg_probackup set-config -B backup-path --instance=instance_name

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

    

参数解释

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

    --instance 指定备份实例名称(同一备份根目录可创建多个备份实例)

    -D,--pgdata 指定数据库目录(PGDATA)

    --external-dirs 排除指定的目录;例如:—external-dirs=/tmp/dir1:/tmp/dir2

    --restore-command 用于recovery.signal中的restore_command;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连接到归档主机的用户


set-backup

    pg_probackup set-backup -B backup-path --instance=instance_name

    

参数解释:

    -B,--backup-path 备份存储目录

    --instance 备份实例名

    -i 备份集ID

    --ttl 指定备份的固定时间,支持单位ms,s,min,h,d默认:s

    --expire-time 指定备份过期时间

    --note=text 对备份进行文本注释,文本注释大小为1KB


show-config

    pg_probackup show-config -B backup-path --instance=instance_name

    

参数解释:

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

    --instance 指定备份实例名

    --format 支持内容输出格式,默认为plain,可选plain,json


backup

    pg_probackup backup -B backup-path -b backup-mode --instance=instance_name

    

备份选项参数解释:

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

    -b,--backup-mode 备份模式:

        full[完整备份]

        delta[读取数据目录中的所有数据文件,为自上次备份以来已更改页面创建增量备份]

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

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

    --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 跳过数据块基本校验,仅执行文件解包数据校验

    --external-dirs 从数据文件目录中备份时排除指定的目录,如:--external-dirs=/tmp/dir1:/tmp/dir2

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

    --note=text 为备份添加标签,例如: node='backup before app update to v15.3'

日志选项参数解释:

    --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,单位秒


restore

    pg_probackup restore -B backup-path --instance=instance_name

    

恢复参数解释:

    -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 不恢复指定的数据库

    --destroy-all-other-dbs

恢复目标参数:

    --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-proto=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的用户


validate

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

    

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

校验参数解释:

    -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 跳过文件级别数据快校验


checkdb

    pg_probackup checkdb [-B backup-path] [--instance=instance_name]

    

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

参数解释:

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

    --instance 指定备份实例的名称

    -D,--pgdata 指定数据库目录

    --progress 显示进度

    -j,--threads 并行线程数

    --skip-block-validation 跳过文件级别数据块校验

    --amcheck 如果在检查数据文件时未发现损坏,则对PostgreSQL实例执行索引的逻辑验证。您必须在数据库中安装amcheck或amchecknext扩展才能检查其索引。对于没有amcheck的数据库,将跳过索引验证

    --heapallindexed 通过检查所有应建立索引的堆元组是否已经实际建立索引,可以使用该标志进行更彻底的逻辑验证,但是会增CPU、MEM和I/O消耗

    --checkunique


show

    pg_probackup show -B backup-path

    

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

参数解释:

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

    --instance 指定备份实例名

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

    --archive 显示WAL存档信息

    --format 结果输出格式:plain或json;默认:plain

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


delete

    pg_probackup delete -B backup-path —instance=instance_name

    

    该命令用于删除备份

参数解释:

    -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 删除指定备份状态的所有备份


merge

    pg_probackup merge -B backup-path —instance=instance_name

    

    将增量备份合并到其父级完整备份中,并指定要合并的最新增量备份的备份ID

参数解释:

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

    --instance 指定备份实例名

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

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

    --progress 显示merge的进度

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

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

    例如: pg_probackup merge -B /data/pgbackup --instance=mybackup1 -i <backup_id>

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


add-instance

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

    

    一个备份目录中可以添加多个备份实例,可以是本地备份实例也可以是远程备份实例

参数解释:

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

    -D,--pgdata 指定数据库目录

    --instance 指定备份实例名

    --external-dirs 备份时从数据库目录中排出哪些目录不进行备

远程选项:

    --remote-proto 指定远程连接协议,默认SSH(ssh,none)

    --remote-host 指定远程连接的IP(远程postgres主机IP地址)

    --remote-port 指定远程连接的端口(远程postgres主机的端口,默认:22)

    --remote-path 指定远程主机pg_probackup的路径

    --remote-user 指定远程连接的用户名

    --ssh-options 其他ssh选项


del-instance

    pg_probackup del-instance -B backup-path --instance=instance_name

    

    删除一个备份实例

参数解释:

    -B,--backup-path 备份存储目录

    --instance 指定要删除的备份实例名


archive-push

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

    

    复制归档文件到指定目录(执行归档操作)

参数解释:

    -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


archive-get

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

    

    获取归档日志文件

参数解释:

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

    --instance 指定备份实例的名称

    --wal-file-name 复制到归档目录的文件名称

    --wal-file-path WAL归档的相对目标路径

    -j,--threads 并行归档的线程数

    --batch-size 为了加快归档速度,该选项可以指定大小进行批量复制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


catchup

    pg_probackup catchup -b catchup-mode

    

    在不使用备份目录的情况下创建PostgreSQL实例的副本

参数解释:

    -b,--backup-mode catchup的模式:FULL|DELTA|PTRACK

    --stream 流式传输事务日志(只支持该模式)

    -S,--slot 使用的复制槽名称

    --temp-slot 是否使用临时复制槽

    --perm-slot 是否创建永久复制槽

    -j,--threads catchup使用的并行线程数

    --tablespace-mapping=OLDDIR=NEWDIR 将表空间从目录OLDDIR重新定位到NEWDIR

    --exclude-path=path_prefix 具有path_prefix(相对于pgdata)的文件将被排除在catchup之外(可以多次使用)危险选项!使用风险自负

    --dry-run 在没有任何更改的情况下,试运行

连接选项:

    -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连接使用的其他选项


注:详细命令说明查询地址(如下,backup)

https://postgrespro.github.io/pg_probackup/#pbk-backup

最后修改时间:2024-02-07 10:41:45
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论