POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_java

与MYSQL 不一样,开源XTRABACKUP 的备份软件无法跟上MYSQL 版本的更迭,PG 这点做的是一贯的好。从来没有让人失望过。

所以POSTGRESQL 数据的备份一直就不是一个问题,众多的工具以及pg_basebackup 良好的功能,让POSTGRESQL 备份起来速度与硬件有关。

但基于POSTGRESQL 本身的原理,数据库表的体积与他存储的数据之间的比率一直不是很好看,所以PG 15 在备份中,引入了数据压缩的功能来加大pg_basebackup 备份后的数据的数据的压缩比。同时除此之外还有一些新的选项。

其中第一个最大的变化就是,你的备份只能产生在运行pg_basebackup的主机上,参见下图 PG 15 与之前的版本不同在于,备份文件的目标位置可以被锁定到非命令执行的机器中,而是定位到正在执行数据备份工作的目标机器。

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_数据库_02

匹配的命令也很简单,通过target来完成,并匹配

 pg_basebackup -h 127.0.0.1 -p 5432 -U postgres --target=server:/home/postgres/backup -Xnone

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_java_03

除了可以在数据库LOCAL 的地方进行备份以外,数据压缩的部分也得到加深,同时基于 target 的参数的加入会产生如下的压缩的变化。

变化如下

1 压缩在服务端进行,还是在客户端进行,这二者产生压缩的对数据库和硬件会有不同的压力 ,如果选择在服务端,或者说数据库端进行压缩,将节省带宽,但会影响数据库端的CPU ,如果是选择在客户端进行相关的压缩,则带宽会使用过度。

2  压缩的模式支持 GZIP, LZ4,ZSTD 或者不压缩, 举例我们通过GZIP 在服务器端进行压缩方式的备份

pg_basebackup -h 192.168.198.100 -p 5432 -U admin  -Xnone --target=server:/home/postgres/backup -Z gzip:9

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_linux_04

但如果此时我们选择 LZ4 或者 ZSTD的方式进行数据压缩备份,则你的PG 在编译安装时必须有相关的选择项加入,否则是无法进行相关的压缩备份的工作。

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_java_05

这里为了掩饰,我们重新安装 POSTGRESQL 15 并在编译的环节加入 lz4 和 zstd  

pg_basebackup -h 192.168.198.100 -p 5432 -U admin  -Xnone --target=server:/home/postgres/backup -Z lz4:9

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_数据库_06

pg_basebackup -h 192.168.198.100 -p 5432 -U admin  -Xnone --target=server:/home/postgres/backup -Z zstd:9

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_数据库_07

相比较,三种备份和数据压缩的方式,那种压缩的比率更高,这里ZSTD 在通用比率的压缩下,文件最小在 2.4mb , gzip 紧随其后 2.9mb , 而LZ4 则在 3.5mb  .  .

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_数据库_08

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_linux_09

在备份中,实际上我们建议是,在数据库服务器上进行备份的产生,在网络是数据传输瓶颈和丢包的罪魁祸首的情况下,先将备份文件产生于数据库服务器本身,是一个好的办法,

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_java_10

下面就总结一个,在远程运行备份命令,但是在数据库本地产生备份数据,并进行压缩的同时包含WAL 日志的方法。

备份完毕后,会产生一个压缩文件和整体备份文件的说明。

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_python_11

以下命令均为 PG15 中在备份主机目录下,产生备份压缩文件的方法。

pg_basebackup -h 192.168.198.100 -p 5432 -U admin  -P --checkpoint=fast -Xf --target=server:/home/postgres/backup -Z lz4:9 -v -r 0.1M

pg_basebackup 

-h 192.168.198.100       此位置为数据库主机的位置IP

-p 5432                         此位置为数据库主机的端口号

-U admin                       此位置为具有SUPERUSER的数据库登陆账号名

-Xnone                           此位置为不备份  write-ahead logs 

-Xfetch                            与上面的方式互换,这里在整体数据库拷贝完毕后,在备份日志, 在本地备份的情况下 -Xstream 的方式将不能被使用

 --target=server:/home/postgres/backup   指定备份的在数据库所在位置的备份文件存储位置

-Z zstd:9    压缩模式指定并且指定相关的压缩方式和压缩的等级,使用zstd进行压缩

-Z lz4:9      使用lz4  进行压缩

-Z gzip:9    使用gzip 进行压缩

-r 01.MB    为进行数据处理时的限速

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_数据库_12

数据库恢复,则需要根据选择的压缩模式,在数据库主机上安装 LZ4 或者 ZSTD 命令对数据备份文件解压后,在拷贝到原数据库目录就可以解决问题了。

相关参考文字

https://www.dbi-services.com/blog/new-options-for-pg_basebackup-in-postgresql-15/

注:每种压缩模式的等级不同,请自行查询 ZSTD ,LZ4 的压缩等级上限和默认值

POSTGRESQL 15  pg_basebackup  新功能,LOCAL backup 与  数据强力压缩_mysql_13