pig pgbackrest

使用 pig pgbackrest 子命令管理 pgBackRest 备份与时间点恢复

pig pgbackrest 命令(别名 pig pb)用于管理 pgBackRest 备份和时间点恢复(PITR)。它封装了常用的 pgbackrest 操作,提供简化的备份管理体验。所有命令均以数据库超级用户身份(默认 postgres)执行。

命令概览

信息查询

命令描述实现方式
pb info显示备份仓库信息pgbackrest info
pb ls列出备份集pgbackrest info
pb ls repo列出配置的仓库解析 pgbackrest.conf
pb ls stanza列出所有 stanza解析 pgbackrest.conf

备份与恢复

命令描述实现方式
pb backup创建备份pgbackrest backup
pb restore从备份恢复(PITR)pgbackrest restore
pb expire清理过期备份pgbackrest expire

Stanza 管理

命令描述实现方式
pb create创建 stanza(首次设置)pgbackrest stanza-create
pb upgrade升级 stanza(PG 大版本升级后)pgbackrest stanza-upgrade
pb delete删除 stanza(危险操作!)pgbackrest stanza-delete

控制命令

命令别名描述实现方式
pb check验证备份仓库完整性pgbackrest check
pb start启用 pgBackRest 操作pgbackrest start
pb stop禁用 pgBackRest 操作pgbackrest stop
pb logl, lg查看日志tail/cat 日志文件

快速入门

# 查看备份信息
pig pb info                          # 显示所有备份信息
pig pb info -o json                  # JSON 格式输出
pig pb ls                            # 列出所有备份
pig pb ls repo                       # 列出配置的仓库
pig pb ls stanza                     # 列出所有 stanza

# 创建备份(必须在主库执行)
pig pb backup                        # 自动模式:无备份则全量,否则增量
pig pb backup full                   # 全量备份
pig pb backup diff                   # 差异备份
pig pb backup incr                   # 增量备份

# 恢复(PITR)
pig pb restore                       # 恢复到最新(WAL 流末尾)
pig pb restore -I                    # 恢复到备份一致性点
pig pb restore -t "2025-01-01 12:00:00+08"  # 恢复到指定时间
pig pb restore -n savepoint          # 恢复到命名还原点

# Stanza 管理
pig pb create                        # 初始化 stanza
pig pb upgrade                       # PG 大版本升级后升级 stanza
pig pb check                         # 验证仓库完整性

# 清理
pig pb expire                        # 按保留策略清理
pig pb expire --dry-run              # 干运行模式

全局参数

以下参数适用于所有 pig pb 子命令:

参数简写说明
--stanza-spgBackRest stanza 名称(自动检测)
--config-c配置文件路径
--repo-r仓库编号(多仓库场景)
--dbsu-U数据库超级用户(默认:$PIG_DBSUpostgres

Stanza 自动检测:

如果未指定 -s 参数,pig 会从配置文件中自动检测 stanza 名称:

  1. 读取配置文件(默认 /etc/pgbackrest/pgbackrest.conf
  2. 查找非 [global*] 开头的 section
  3. 使用找到的第一个 stanza

如果配置文件中有多个 stanza,会发出警告并使用第一个。此时应显式指定 --stanza 参数。

多仓库支持:

pgBackRest 支持配置多个仓库(repo1、repo2 等)。使用 -r 参数指定操作的目标仓库:

pig pb backup -r 1                   # 备份到 repo1
pig pb backup -r 2                   # 备份到 repo2
pig pb info -r 2                     # 查看 repo2 的备份信息

信息查询命令

pb info

显示备份仓库详细信息,包括所有备份集和 WAL 归档状态。

pig pb info                          # 显示所有备份信息
pig pb info -o json                  # JSON 格式输出
pig pb info --set 20250101-120000F   # 显示特定备份集详情

选项:

参数简写说明
--output-o输出格式:text、json
--set显示特定备份集详情

pb ls

列出备份仓库中的资源。

pig pb ls                            # 列出所有备份(默认)
pig pb ls backup                     # 列出所有备份(显式)
pig pb ls repo                       # 列出配置的仓库
pig pb ls stanza                     # 列出所有 stanza
pig pb ls cluster                    # stanza 的别名

类型说明:

类型描述数据来源
backup列出所有备份集(默认)pgbackrest info
repo列出配置的仓库解析 pgbackrest.conf
stanza列出所有 stanza解析 pgbackrest.conf

备份命令

pb backup

创建物理备份。备份只能在主库实例上执行。

pig pb backup                        # 自动模式
pig pb backup full                   # 全量备份
pig pb backup diff                   # 差异备份
pig pb backup incr                   # 增量备份
pig pb backup --force                # 跳过主库角色检查

选项:

参数简写说明
--force-f跳过主库角色检查

备份类型:

类型说明
(空)自动模式:无备份则全量,否则增量
full全量备份:备份所有数据
diff差异备份:自上次全量备份以来的变更
incr增量备份:自上次任意备份以来的变更

主库检查:

执行备份前,命令会自动检查当前实例是否为主库。如果是备库,命令会报错退出。使用 --force 可跳过此检查。

pb expire

按保留策略清理过期的备份和 WAL 归档。

pig pb expire                        # 按策略清理
pig pb expire --set 20250101-*       # 删除特定备份集
pig pb expire --dry-run              # 干运行模式(仅显示)

选项:

参数说明
--set删除特定备份集
--dry-run干运行模式:仅显示将删除的内容

保留策略配置:

保留策略在 pgbackrest.conf 中配置:

[global]
repo1-retention-full=2               # 保留的全量备份数
repo1-retention-diff=4               # 保留的差异备份数
repo1-retention-archive=2            # WAL 归档保留策略

恢复命令

pb restore

从备份恢复,支持时间点恢复(PITR)。

# 恢复目标(互斥选项)
pig pb restore                       # 恢复到最新(默认)
pig pb restore -d                    # 恢复到最新(显式)
pig pb restore -I                    # 恢复到备份一致性点
pig pb restore -t "2025-01-01 12:00:00+08"  # 恢复到指定时间
pig pb restore -t "2025-01-01"       # 恢复到日期(当天 00:00:00)
pig pb restore -t "12:00:00"         # 恢复到时间(今天)
pig pb restore -n my-savepoint       # 恢复到命名还原点
pig pb restore -l "0/7C82CB8"        # 恢复到 LSN
pig pb restore -x 12345              # 恢复到事务 ID

# 备份集选择(可与恢复目标组合)
pig pb restore -b 20251225-120000F   # 从特定备份集恢复

# 其他选项
pig pb restore -t "..." -X           # 排他模式(在目标前停止)
pig pb restore -t "..." -P           # 恢复后自动提升
pig pb restore -y                    # 跳过确认倒计时

恢复目标选项:

参数简写说明
--default-d恢复到 WAL 流末尾(最新数据)
--immediate-I恢复到备份一致性点
--time-t恢复到指定时间戳
--name-n恢复到命名还原点
--lsn-l恢复到指定 LSN
--xid-x恢复到指定事务 ID

备份集和其他选项:

参数简写说明
--set-b从特定备份集恢复(可与目标组合)
--data-D目标数据目录
--exclusive-X排他模式:在目标前停止
--promote-P恢复后自动提升为主库
--yes-y跳过确认和倒计时

时间格式:

支持多种时间格式输入,自动补全时区(支持非整小时时区如 +05:30):

格式示例说明
完整格式2025-01-01 12:00:00+08包含时区的完整时间戳
仅日期2025-01-01自动补全为当天 00:00:00(当前时区)
仅时间12:00:00自动补全为今天(当前时区)

恢复流程:

  1. 验证参数和环境
  2. 检查 PostgreSQL 已停止
  3. 显示恢复计划,等待确认(5 秒倒计时)
  4. 执行 pgbackrest restore
  5. 提供恢复后的操作指引

重要提示: 恢复前必须先停止 PostgreSQL:

pig pg stop                          # 停止 PostgreSQL
pig pb restore -t "..."              # 执行恢复
pig pg start                         # 启动 PostgreSQL

Stanza 管理命令

pb create

初始化新的 stanza。必须在首次备份前执行。

pig pb create                        # 创建 stanza
pig pb create --no-online            # PostgreSQL 未运行时创建
pig pb create --force                # 强制创建

选项:

参数简写说明
--no-onlinePostgreSQL 未运行时创建
--force-f强制创建

pb upgrade

PostgreSQL 大版本升级后更新 stanza。

pig pb upgrade                       # 升级 stanza
pig pb upgrade --no-online           # PostgreSQL 未运行时升级

选项:

参数说明
--no-onlinePostgreSQL 未运行时升级

使用场景:

当 PostgreSQL 进行大版本升级(如 16 → 17)后,需要执行此命令更新 stanza 元数据。

pb delete

删除 stanza 及其所有备份。

pig pb delete --force                # 删除 stanza(需要 --force)
pig pb delete --force --yes          # 跳过倒计时确认

选项:

参数简写说明
--force-f确认删除(必需)
--yes-y跳过倒计时确认

警告: 这是一个破坏性且不可逆的操作!所有备份将被永久删除。

命令包含多重安全机制:

  1. 必须提供 --force 参数
  2. 5 秒倒计时确认(可按 Ctrl+C 取消)
  3. 使用 --yes 可跳过倒计时

控制命令

pb check

验证备份仓库的完整性和配置。

pig pb check                         # 验证仓库

此命令检查:

  • WAL 归档配置是否正确
  • 仓库是否可访问
  • stanza 配置是否有效

pb start

启用 pgBackRest 操作。

pig pb start                         # 启用操作

在执行 pb stop 后使用此命令恢复正常操作。

pb stop

禁用 pgBackRest 操作(用于维护)。

pig pb stop                          # 禁用操作
pig pb stop --force                  # 终止正在运行的操作

选项:

参数简写说明
--force-f终止正在运行的操作

使用场景:

在进行系统维护时,使用此命令阻止新的备份操作启动。

日志命令

pb log

查看 pgBackRest 日志文件。日志目录为 /pg/log/pgbackrest/

pig pb log                           # 列出日志文件
pig pb log list                      # 列出日志文件
pig pb log tail                      # 实时查看最新日志
pig pb log tail -n 100               # 显示最后 100 行并跟踪
pig pb log cat                       # 显示最新日志内容
pig pb log cat -n 50                 # 显示最后 50 行
pig pb log cat pg-meta-backup.log    # 显示指定日志文件

子命令:

子命令别名说明
listls列出日志文件
tailfollow, f实时跟踪最新日志
catshow显示日志内容

选项:

参数简写默认值说明
--lines-n50显示的行数

权限处理:

如果当前用户没有权限读取日志目录,命令会自动使用 sudo 重试。

设计说明

命令执行方式:

所有 pig pb 命令都以数据库超级用户(DBSU)身份执行。这是因为 pgBackRest 需要访问 PostgreSQL 数据文件和 WAL 归档。

执行逻辑:

  • 如果当前用户已是 DBSU:直接执行命令
  • 如果当前用户是 root:使用 su - postgres -c "..." 执行
  • 其他用户:使用 sudo -inu postgres -- ... 执行

与 pgbackrest 的关系:

pig pb 并非 pgbackrest 的完整封装,而是针对常用操作的上层抽象:

  • 自动检测 stanza 名称,无需每次指定
  • 备份前自动检查主库角色
  • 恢复时显示计划并要求确认
  • 提供人性化的时间格式输入
  • 恢复后提供操作指引

如需使用 pgbackrest 的完整功能,请直接使用 pgbackrest 命令。

默认配置路径:

配置项默认值
配置文件/etc/pgbackrest/pgbackrest.conf
日志目录/pg/log/pgbackrest
数据目录配置文件中的 pg1-path,或 $PGDATA 环境变量,或 /pg/data

安全考虑:

  • pb delete 需要 --force 确认,并有 5 秒倒计时
  • pb restore 显示恢复计划,有 5 秒倒计时确认
  • pb backup 默认检查主库角色,防止在备库执行
  • 日志命令的文件名参数会过滤路径,防止路径遍历攻击

平台支持:

此命令专为 Linux 系统设计,依赖 Pigsty 的默认目录结构。


最后修改 2026-01-26: update pig docs (5c06905)