原 【异地备份】pgbackrest如何将PostgreSQL数据库备份到S3中?
Tags: 原创PGPostgreSQL异地备份S3pgbackrest
简介
pgBackRest 是一个强大的开源备份和恢复工具,专为 PostgreSQL 数据库设计。它提供了高效、可靠的备份与恢复能力,并支持多种存储后端(如本地磁盘、网络存储、S3 兼容存储等)。
使用场景
- 数据库备份到本地或远程存储。
- 基于时间点的灾难恢复(PITR)。
- 数据库升级或迁移时的数据保护。
- 与 S3 或类似服务的集成,用于云备份。
pgBackRest 的核心功能
高效备份
- 增量备份:只备份自上次完整备份以来更改的数据块,减少存储空间和备份时间。
- 并行处理:支持多线程备份和恢复,提高速度。
- 数据压缩:备份数据可进行压缩以节省存储空间。
- 流复制备份:无需停机即可从主库或从库进行备份。
可靠恢复
- 支持 PITR(Point-in-Time Recovery,时间点恢复)。
- 可以恢复到指定的事务时间点或检查点。
- 提供一致性检查以确保备份数据的完整性。
灵活存储支持
- 支持本地文件系统、NFS、S3 兼容存储(如 AWS S3、MinIO)。
- 支持多个存储库(例如本地和云存储同时备份)。
备份加密
- 使用 AES-256-CBC 加密备份数据,确保数据安全。
备份管理
- 自动删除过期的备份(通过保留策略管理)。
- 可管理多个 PostgreSQL 实例的备份(基于 Stanza)。
监控与日志
- 提供详细的日志记录,便于问题排查。
- 提供统计信息,用于监控备份性能。
pgBackRest 的优点
- 高性能:并行处理和增量备份提升了备份和恢复速度。
- 稳定可靠:确保备份的一致性和完整性,适用于大规模数据库。
- 灵活性:支持多种存储后端和配置方式,适应不同的部署场景。
- 简洁配置:通过配置文件和命令行选项,便于集成和管理。
pgBackRest 的主要组件
Stanza
- 一个 Stanza 代表一个 PostgreSQL 实例。
- 用于区分和管理多个数据库实例的备份。
Repository
- 存储备份数据的物理位置,可以是本地路径或 S3 存储。
- 支持配置多个存储库。
备份类型
- Full(全量备份):备份整个数据库。
- Differential(差异备份):基于最近的全量备份,仅备份变化的数据。
- Incremental(增量备份):基于最近的备份(全量或差异),仅备份变化的数据。
常用命令
初始化 Stanza
1pgbackrest --stanza=mydb --pg1-path=/var/lib/postgresql/data stanza-create检查配置
1pgbackrest --stanza=mydb check进行备份
1pgbackrest --stanza=mydb backup查看备份信息
1pgbackrest --stanza=mydb info恢复数据
1pgbackrest --stanza=mydb restore
使用 pgBackRest 将数据备份到 S3 存储可以通过配置 S3
存储库完成,具体步骤如下:
安装pgBackRest
确保 pgBackRest 已经安装,并且支持 S3。需要确认 libcurl
支持已编译到 pgBackRest 中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | wget https://github.com/pgbackrest/pgbackrest/archive/refs/tags/release/2.54.tar.gz yum -y install libyaml-devel libxml2 libxml2-devel bzip2 bzip2-devel export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/pg16/pg16/lib export PATH=$PATH:/pg16/pg16/bin tar -zxvf 2.54.tar.gz cd pgbackrest-release-2.54/src ./configure make -j8 make install ln -s /usr/local/bin/pgbackrest /usr/bin/pgbackrest chmod 755 /usr/local/bin/pgbackrest mkdir -p -m 770 /var/log/pgbackrest chown postgres:postgres /var/log/pgbackrest mkdir -p /etc/pgbackrest mkdir -p /etc/pgbackrest/conf.d touch /etc/pgbackrest/pgbackrest.conf chmod 640 /etc/pgbackrest/pgbackrest.conf chown postgres:postgres /etc/pgbackrest/pgbackrest.conf mkdir -p /var/lib/pgbackrest chmod 750 /var/lib/pgbackrest chown postgres:postgres /var/lib/pgbackrest |
创建 S3 存储桶
登录到 S3 服务(如 AWS S3 或兼容的 S3 服务,如 MinIO),创建一个存储桶,用于存储备份数据。
注意:必须配置https访问,否则pgBackRest不能使用。
配置 pgBackRest
修改 pgbackrest.conf
文件,为存储库添加 S3 配置。
配置文件路径
- 全局配置:
/etc/pgbackrest/pgbackrest.conf
- 本地配置:
/var/lib/pgbackrest/pgbackrest.conf
配置示例
以下是将备份存储到 S3 的配置示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | cat > /etc/pgbackrest/pgbackrest.conf << "EOF" [global] log-level-file=detail log-path=/var/log/pgbackrest start-fast=y process-max=4 repo1-path=/pgbackrest repo1-retention-full=2 repo1-retention-diff=1 repo1-retention-archive=1 repo1-s3-bucket=pgbk repo1-s3-endpoint=https://192.16.7.162:9003 repo1-s3-key=12345678 repo1-s3-key-secret=12345678 repo1-type=s3 repo1-s3-region=cn repo1-s3-uri-style=path repo1-s3-verify-tls=n [global:archive-push] compress-level=3 [pg16] pg1-path=/pg16/pgdata pg1-port=5441 pg1-host-user=pg16 EOF |