pgBackRest 是专为 PostgreSQL 设计的开源备份与恢复工具,以其高性能、可靠性和灵活性著称

news/2025/2/12 17:19:35/

pgBackRest 是专为 PostgreSQL 设计的开源备份与恢复工具,以其高性能、可靠性和灵活性著称。它支持 全量备份增量备份并行备份/恢复加密 等特性,适用于大规模数据库和关键业务场景。以下是其核心功能及操作指南:


一、pgBackRest 核心特性

  1. 多种备份类型
    • 全量备份(Full Backup):完整备份数据库集群。
    • 差异备份(Differential Backup):仅备份自上次全量备份后的变化。
    • 增量备份(Incremental Backup):基于上一次任意类型备份的变化(更高效)。
  2. 并行处理
    • 支持多线程压缩和传输,显著提升大数据库备份速度。
  3. 高效存储管理
    • 通过 --repo-retention-full 自动清理旧备份,节省存储空间。
  4. 时间点恢复(PITR)
    • 结合 WAL 归档,恢复到任意精确时间点。
  5. 加密与校验
    • 支持 AES-256 加密备份,确保数据安全。

二、安装与配置

1. 安装 pgBackRest
# Ubuntu/Debian
sudo apt-get install pgbackrest# CentOS/RHEL
sudo yum install pgbackrest
2. 配置 PostgreSQL
  • 启用 WAL 归档(用于 PITR):
    # postgresql.conf
    wal_level = replica
    archive_mode = on
    archive_command = 'pgbackrest --stanza=demo archive-push %p'
    
3. 配置 pgBackRest

创建配置文件 /etc/pgbackrest.conf

[demo]  # 备份集名称(Stanza)
pg1-path=/var/lib/postgresql/12/main  # PostgreSQL 数据目录[global]
repo1-path=/var/lib/pgbackrest  # 备份存储路径
repo1-retention-full=2          # 保留最近2次全量备份
start-fast=y                    # 强制创建检查点以加速备份

三、备份操作

1. 初始化备份仓库
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info stanza-create
2. 执行全量备份
sudo -u postgres pgbackrest --stanza=demo --type=full backup
3. 执行增量备份
sudo -u postgres pgbackrest --stanza=demo --type=incr backup
4. 验证备份
sudo -u postgres pgbackrest --stanza=demo --log-level-console=info verify

四、恢复操作

1. 完全恢复(最新状态)
# 停止 PostgreSQL
sudo systemctl stop postgresql# 清空数据目录
sudo -u postgres rm -rf /var/lib/postgresql/12/main/*# 执行恢复
sudo -u postgres pgbackrest --stanza=demo --type=immediate restore# 启动 PostgreSQL
sudo systemctl start postgresql
2. 时间点恢复(PITR)
sudo -u postgres pgbackrest --stanza=demo --type=time --target="2023-10-01 14:30:00" restore
3. 恢复到指定备份点
# 查看备份列表
sudo -u postgres pgbackrest --stanza=demo info# 根据备份ID恢复
sudo -u postgres pgbackrest --stanza=demo --set=20231001-123456F restore

五、高级功能

1. 并行备份与压缩
# 启用4线程压缩
sudo -u postgres pgbackrest --stanza=demo --type=full --compress-type=lz4 --process-max=4 backup
2. 备份加密
# pgbackrest.conf
[global]
repo1-cipher-type=aes-256-cbc
repo1-cipher-pass=secure_password
3. 远程备份存储
  • 支持备份到 S3、Azure、GCS 或 SFTP:
    [global]
    repo1-type=s3
    repo1-s3-endpoint=s3.amazonaws.com
    repo1-s3-bucket=my-backup-bucket
    repo1-s3-key=ACCESS_KEY
    repo1-s3-key-secret=SECRET_KEY
    

六、最佳实践

  1. 定期验证备份
    • 使用 verify 命令确保备份可恢复。
  2. 监控与日志
    • 配置 --log-level-file=detail 记录详细日志。
  3. 自动化清理策略
    • 设置 repo1-retention-fullrepo1-retention-diff 管理备份保留。
  4. 分离备份存储
    • 将备份存储在与生产环境隔离的位置(如云存储)。

七、常见问题

1. 备份失败:权限不足
  • 确保 PostgreSQL 用户对数据目录和备份目录有读写权限。
  • 检查 SELinux/AppArmor 是否阻止访问。
2. 恢复后数据库无法启动
  • 确认恢复时 PostgreSQL 已停止且数据目录已清空。
  • 检查 postgresql.auto.conf 是否残留旧配置。
3. WAL 归档堆积
  • 调整 archive_timeout 或优化业务写入频率。

通过 pgBackRest,PostgreSQL 用户可以高效管理备份与恢复任务,尤其适合对 RTO(恢复时间目标)RPO(恢复点目标) 要求严格的场景。建议结合监控工具(如 Prometheus)实现全链路可观测性。


http://www.ppmy.cn/news/1571474.html

相关文章

开源机器人+具身智能 解决方案+AI

开源机器人、具身智能(Embodied Intelligence)以及AI技术的结合,可以为机器人领域带来全新的解决方案。以下是这一结合的可能方向和具体方案: 1. 开源机器人平台 开源机器人平台为开发者提供了灵活的基础架构,可以在此基础上结合具身智能和AI技术。以下是一些常用的开源机…

ChatGPT搜索 vs. 推理:如何选择和使用

搜索 vs. 推理:如何选择和使用 1. 概述 在日常工作和学习中,我们经常需要获取信息或者解决问题。通常可以通过两种方式完成: 搜索(web):从互联网上获取最新、实时的信息。推理(逻辑能力&…

C++引用深度详解

C引用深度详解 前言1. 引用的本质与核心特性1.1 引用概念1.2 核心特性 2. 常引用与权限控制2.1 权限传递规则2.2 常量引用2.3 临时变量保护1. 样例2. 样例3. 测试 三、引用使用场景分析3.1 函数参数传递输出型参数避免多级指针高效传参 3.2 做函数返回值正确使用危险案例 4. 性…

【并发控制、更新、版本控制】.NET开源ORM框架 SqlSugar 系列

系列文章目录 🎀🎀🎀 .NET开源 ORM 框架 SqlSugar 系列 🎀🎀🎀 文章目录 系列文章目录一、并发累计(累加)1.1 单条批量累计1.2 批量更新并且字段11.3 批量更新并且字段list中对应的…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”,往下滑动,找到“Un…

java实现Http请求的几种常用方法

背景 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适。很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对方提供的接口或第三方接口(短信、天气等)。若是普通java工程推荐使用OkHt…

实在RPA案例|视源股份:驱动20+核心场景数字化升级,组织效能提升超80%

广州视源电子科技股份有限公司(以下简称 “视源股份”,股票代码:002841.SZ)是广东省大型上市企业,旗下产品常年占据全国份额第一,成功孵出 “液晶电视主控板卡、希沃(seewo)教育交互…

SSM开发(十一) mybatis关联关系多表查询(嵌套查询,举例说明)

目录 一、背景介绍 二、一对一查询(嵌套查询) 三、一对多查询(嵌套查询) 四、嵌套查询效率评估 注:关联查询则是指在一个查询中涉及到多个表的联合查询 一、背景介绍 当对数据库的操作涉及到多张表,这在面向对象语言如Java中就涉及到了对象与对象之间的关联关系。针对多…