作者:王志斌,曾获得中国PostgreSQL数据库管理工程师(PGCE),是PostgreSQL官方认证讲师,盘古云课堂特邀金牌讲师。
Pgbackrest作为PostgreSQL数据库的备份和还原工具,在软件设计上综合考虑了功能和性能,包括完整性、一致性、安全性、数据压缩、异步并行等方面,其主要技术特性主要包括如下内容,如图所示:
- S3兼容
支持备份存储S3和Azure兼容对象存储上,如对象存储Minio。
- 压缩技术
支持gzip, bzip, lz4, zstd的压缩算法,并提供不同压缩等级。
- 异步、并行
在异步模式下通过并行推送和获取以加快处理速度,提高备份与还原处理效率。
- 校验和
采用checksum 算法,验证备份期间复制的每个文件的校验和。在完全备份期间,将验证所有页面的校验和,而在差异备份和增量式备份期间,将验证已更改文件的校验和。
- 加密
通过定义加密类型及密码,来保证备份数据的存储安全性。
在技术特性基础上,pgbackrest实现了备份、还原、保留策略、云端备份等相关功能,如图所示:
功能列表
- 备份方式
全量备份:将数据库集群的全部内容复制到备份中。数据库集群的第一个备份始终是全量备份。始终能够直接还原全量备份。全量备份不依赖于完整备份之外的任何文件来保持一致性。
增量备份:仅复制自上次全量备份以来已更改的那些数据库集群文件。通过复制所选差异备份中的所有文件以及先前全量备份中的相应未更改文件来还原差异备份。差异备份的优点在于,与全量备份相比,它需要的磁盘空间更少,但是,差异备份和全量备份都必须有效才能还原差异备份。
差异备份:仅复制自上次备份(可以是另一个增量备份,差异备份或全量备份)以来发生更改的那些数据库集群文件。由于增量备份仅包括自上次备份以来已更改的文件,因此它们通常比全量备份或差异备份小得多。与差异备份一样,增量备份依赖于其他备份才能有效还原增量备份。由于增量备份仅包括自上次备份以来的那些文件,因此,所有先前的增量备份(回到先前的差异备份),先前的差异备份和先前的全量备份都必须有效,才能执行增量备份的还原。如果不存在差异备份,则所有先前的所有增量备份都将还原为必须存在的先前的完整备份,并且完整备份本身必须有效才能还原增量备份。
- 保留策略
支持保留的备份数量,可以指定全量、差异备份的具体数量。
- 还原方式
支持全量、增量、差异还原以及时间点还原,还同时支持还原指定数据库、表空间和链接支持等。
- 异步归档
支持异步的推送和获取,利用pgbackrest并发特性,提升备份和还原的性能,同时在处理过程中对重新数据进行校验和处理,保证备份和还原数据正确性。
- 检查
检查命令验证pgBackRest和archive_command设置是否已正确配置以进行归档和备份。
- 监控
支持通过SQL查询方式,在PostgreSQL中创建函数查询检查信息,也可以通过Jq从Json中提取数据来进行查询。
- 加密
基于用户提供的密码及加密类型对存储库进行加密,防止未经授权访问存储库中的数据。
- 压缩
根据用户设定的压缩算法及压缩等级,将压缩后的数据存储到存储库中。
注:pgbackrest目前支持Postgresql 8.3以上版本
使用场景
Pgbackrest作为一款优秀的备份和还原工具,与PostgreSQL自带的pg_basebackup相比功能更加强大,尤其是体现在与应用场景的结合使用,下面主要从单机、远程、云端三个场景进行操作介绍:
操作环境系统版本:Centos 7
Pgbackrest版本:v2.24
PostgreSQL版本:12.2
单机使用
主机和备份存储在同一台物理主机上,为了确保备份数据的安全性,一般不推荐生成环境使用。
安装配置
首选需要进行源码下载和编译,然后配置pgbackrest的相关目录,并修改对应权限。
下载源码文件。
wget https://github.com/pgbackrest/pgbackrest/archive/release/2.26.tar.gz
安装编译相关依赖环境。
sudo yum install -y libxml2 libxml2-devel openssl openssl-devel
进行源码编译。
cd src/
./configure && make
拷贝执行程序到/usr/bin目录。
sudo cp pgbackrest /usr/bin
修改权限。
sudo chmod 755 /usr/bin/pgbackrest
创建配置日志目录。
sudo mkdir -p -m 770 /var/log/pgbackrest
修改访问权限
sudo chown pgbackrest:pgbackrest /var/log/pgbackrest
创建配置目录。
sudo mkdir -p /etc/pgbackrest
sudo mkdir -p /etc/pgbackrest/conf.d
创建配置文件。
sudo touch /etc/pgbackrest/pgbackrest.conf
sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
修改访问权限。
sudo chown pgbackrest:pgbackrest /etc/pgbackrest/pgbackrest.conf
创建仓库路径。
sudo mkdir -p /var/lib/pgbackrest
sudo chmod 750 /var/lib/pgbackrest
sudo chown pgbackrest:pgbackrest /var/lib/pgbackrest
操作上述命令后,pgbackrest的配置基本完成,下面将进行配置节的操作。
服务器上配置节
在服务器上配置Pgbackrest节的相关内容,并修改Pgbackrest的配置文件。最后通过check命令来进行节的检查。
生成备份所需的密码。
openssl rand -base64 48
Dpy3iBVyfoAsDH+OQyApvpNT5ijs3jPI3fuVgTRKKbckN9HZe74ObGtsdkrhaa7T
修改配置文件。
vim /etc/pgbackrest/pgbackrest.conf
配置仓库路径。
[postgres]
pg1-path=/home/postgres/pg/data/
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
repo1-cipher-pass=Dpy3iBVyfoAsDH+OQyApvpNT5ijs3jPI3fuVgTRKKbckN9HZe74ObGtsdkrhaa7T
repo1-cipher-type=aes-256-cbc
process-max