与MYSQL 不一样,开源XTRABACKUP 的备份软件无法跟上MYSQL 版本的更迭,PG 这点做的是一贯的好。从来没有让人失望过。
所以POSTGRESQL 数据的备份一直就不是一个问题,众多的工具以及pg_basebackup 良好的功能,让POSTGRESQL 备份起来速度与硬件有关。
但基于POSTGRESQL 本身的原理,数据库表的体积与他存储的数据之间的比率一直不是很好看,所以PG 15 在备份中,引入了数据压缩的功能来加大pg_basebackup 备份后的数据的数据的压缩比。同时除此之外还有一些新的选项。
其中第一个最大的变化就是,你的备份只能产生在运行pg_basebackup的主机上,参见下图 PG 15 与之前的版本不同在于,备份文件的目标位置可以被锁定到非命令执行的机器中,而是定位到正在执行数据备份工作的目标机器。
匹配的命令也很简单,通过target来完成,并匹配
pg_basebackup -h 127.0.0.1 -p 5432 -U postgres --target=server:/home/postgres/backup -Xnone
除了可以在数据库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
但如果此时我们选择 LZ4 或者 ZSTD的方式进行数据压缩备份,则你的PG 在编译安装时必须有相关的选择项加入,否则是无法进行相关的压缩备份的工作。
这里为了掩饰,我们重新安装 POSTGRESQL 15 并在编译的环节加入 lz4 和 zstd
pg_basebackup -h 192.168.198.100 -p 5432 -U admin -Xnone --target=server:/home/postgres/backup -Z lz4:9
pg_basebackup -h 192.168.198.100 -p 5432 -U admin -Xnone --target=server:/home/postgres/backup -Z zstd:9
相比较,三种备份和数据压缩的方式,那种压缩的比率更高,这里ZSTD 在通用比率的压缩下,文件最小在 2.4mb , gzip 紧随其后 2.9mb , 而LZ4 则在 3.5mb . .
在备份中,实际上我们建议是,在数据库服务器上进行备份的产生,在网络是数据传输瓶颈和丢包的罪魁祸首的情况下,先将备份文件产生于数据库服务器本身,是一个好的办法,
下面就总结一个,在远程运行备份命令,但是在数据库本地产生备份数据,并进行压缩的同时包含WAL 日志的方法。
备份完毕后,会产生一个压缩文件和整体备份文件的说明。
以下命令均为 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 为进行数据处理时的限速
数据库恢复,则需要根据选择的压缩模式,在数据库主机上安装 LZ4 或者 ZSTD 命令对数据备份文件解压后,在拷贝到原数据库目录就可以解决问题了。
相关参考文字
https://www.dbi-services.com/blog/new-options-for-pg_basebackup-in-postgresql-15/
注:每种压缩模式的等级不同,请自行查询 ZSTD ,LZ4 的压缩等级上限和默认值