一、pg_probackup概述
pg_probackup是一款免费的备份软件,由俄罗斯PG社区组织Postgres Professional发布的一个用于管理PostgreSQL数据库备份和恢复的工具。
1.1.pg_basebackup优势
1.支持全量备份和增量备份
2.支持增量恢复
3.支持部分还原
4.自动数据校验,无需实际恢复数据
5.支持backup、restore、merge、delete、validate、checkdb的并行化执行
6.支持压缩
7.支持远程备份【需要实现SSH互信】
8.支持从备库备份
9.支持备份位于数据目录之外的文件和目录,如配置文件或日志文件
10.支持保留策略。根据保留策略管理存档和备份。
1.2.pg_basebackup劣势
1.仅支持Postgres Pro 9.5以上的版本
2.Windows系统不支持远程备份恢复
3.在Linux系统中,如果数据库版本小于等于 PostgreSQL 10, 备份用户必须是安装PG的操作系统用户(例如postgres)。
4.对于PostgreSQL 9.5版本数据库,进行备份的数据库账号必须具有superuser的角色,否则无法备份pg_create_restore_point(text) 、 pg_switch_wal()
5.参数block_size 和wal_block_size备份和恢复服务器要一致,否则无法备份。
6.通过 ssh 运行远程操作时,远程和本地 pg_probackup 版本必须相同。
7.pg_probackup寻址范围最大是4GB,也就意味着不管你备份什么文件,备份结果最大也就4GB,如果修改了segment size超过4GB,则意味着备份不完整,数据是不可靠的。
1.3备份方式
1.全量备份:将数据库所有数据文件进行备份
2.增量备份:仅备份上一次备份之后发生变更的数据
DELTA模式:在该模式下,pg_probackup会扫描所有的数据目录文件,然后将上一次备份后发生改变的数据进行备份。这种模式下增量备份的IO消耗基本等同于全量备份
PAGE模式:该模式下,pg_probackup仅会扫描上一次备份后的所有WAL归档日志。推荐使用此模式。
PTRACK模式:在该模式下,pg_probackup会实时跟踪源库数据页的变化,对于上一次备份后发生更新的数据页,将其记录到bitmap中,以此来加快增量备份的时间。跟踪意味着会有开销,但会显著加速增量备份。仅支持Postgres Pro Standard and Postgres Pro Enterprise。
二、pg_probackup 安装
[root@k8s-node2 ~]# wget -c https://github.com/postgrespro/pg_probackup/archive/refs/tags/2.5.11.zip
[root@k8s-node2 dbms]# unzip 2.5.11.zip
[root@k8s-node2 pg_probackup-2.5.11]# make USE_PGXS=1 PG_CONFIG=/dbms/pg12/bin/pg_config top_srcdir=/dbms/postgresql-12.15/
[root@k8s-node2 pg_probackup-2.5.11]# make USE_PGXS=1 PG_CONFIG=/dbms/pg12/bin/pg_config top_srcdir=/dbms/postgresql-12.15/ install
[root@k8s-node2 pg_probackup-2.5.11]# /usr/bin/mkdir -p '/dbms/pg12/bin'
[root@k8s-node2 pg_probackup-2.5.11]# /usr/bin/install -c pg_probackup '/dbms/pg12/bin'
[root@k8s-node2 pg_probackup-2.5.11]# pg_probackup version
pg_probackup 2.5.11 (PostgreSQL 12.15)
三、pg_probackup配置
3.1.初始化备份目录
所谓初始化:就是创建一个备份目录,用于存放备份文件和归档日志文件。
pg_probackup将所有 WAL 和备份文件存储在备份目录的相应子目录中。
[root@k8s-node2 pg_probackup-2.5.11]# mkdir /dbms/pg_probackup_dir
[root@k8s-node2 pg_probackup-2.5.11]# pg_probackup init -B /dbms/pg_probackup_dir
INFO: Backup catalog '/dbms/pg_probackup_dir' successfully inited
[root@k8s-node2 pg_probackup_dir]# chown -R postgres:postgres /dbms/pg_probackckup_dir
--启动pg_probackup的用户必须具有对该目录的完全访问权限。
--pg_probackup创建 backup_dir 备份目录,包含以下子目录:
--wal/— WAL 文件的目录。
--backups/— 备份文件的目录。
3.2.添加新的备份实例
[root@k8s-node2 pg_probackup_dir]# su - postgres
[postgres@k8s-node2:/dbms/pg_probackup_dir]$pg_probackup add-instance -B /dbms/pg_probackup_dir -D $PGDATA --instance pg01
INFO: Instance 'pg01' successfully inited
3.3.开启归档
3.4.创建备份用户
CREATE ROLE backup WITH LOGIN REPLICATION;
GRANT USAGE ON SCHEMA pg_catalog TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.current_setting(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_is_in_recovery() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_start_backup(text, boolean, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_stop_backup(boolean, boolean) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_create_restore_point(text) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_switch_wal() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_last_wal_replay_lsn() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_current_snapshot() TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.txid_snapshot_xmax(txid_snapshot) TO backup;
GRANT EXECUTE ON FUNCTION pg_catalog.pg_control_checkpoint() TO backup
四、pg_probackup备份实操
4.1.修改 pg_probackup 配置文件
--配置文件pg_probackup设置压缩级别
pg_probackup set-config -B /dbms/pg_probackup_dir/ --instance pg01 --compress-algorith=zlib --compress-level=3
--查看pg_probackup配置文件
[postgres@k8s-node2:/dbms/pg_probackup_dir]$pg_probackup show-config -B /dbms/pg_probackup_dir/ --instance pg01
# Backup instance information
pgdata = /dbms/pg12/pgdata
system-identifier = 7240021573820468678
xlog-seg-size = 1073741824
# Connection parameters
pgdatabase = postgres
# Replica parameters
replica-timeout = 5min
# Archive parameters
archive-timeout = 5min
# Logging parameters
log-level-console = INFO
log-level-file = OFF
log-format-console = PLAIN
log-format-file = PLAIN
log-filename = pg_probackup.log
log-rotation-size = 0TB
log-rotation-age = 0d
# Retention parameters
retention-redundancy = 0
retention-window = 0
wal-depth = 0
# Compression parameters
compress-algorithm = zlib
compress-level = 3
# Remote access parameters
remote-proto = ssh
4.2.全量备份
4.3 增量备份
五、pg_probackup恢复实操
5.1.验证备份
pg_probackup在备份过程中会计算备份中每个文件的校验和。检查备份数据文件校验和的过程称为 备份验证。
默认情况下,在进行备份后和恢复之前会运行验证,以检测可能的备份损坏。
[postgres@k8s-node2:/dbms/pg_probackup_dir]$pg_probackup validate -B /dbms/pg_probackup_dir/
INFO: Validate backups of the instance 'pg01'
INFO: Validating backup RZJ9XV
INFO: Backup RZJ9XV data files are valid
INFO: Backup RZJ9XV WAL segments are valid
INFO: Validating backup RZJ9NF
INFO: Backup RZJ9NF data files are valid
INFO: Backup RZJ9NF WAL segments are valid
INFO: All backups are valid
5.2.数据库恢复
--恢复前,关闭数据库并保证指定的数据目录为空
[postgres@k8s-node2:/dbms/pg_probackup_dir]$pg_ctl stop
waiting for server to shut down...... done
server stopped
[postgres@k8s-node2:/dbms/pg_probackup_dir]$cd $PGDATA
[postgres@k8s-node2:/dbms/pg12/pgdata]$rm -rf *
[postgres@k8s-node2:/dbms/pg12/pgdata]$ll
total 0
[postgres@k8s-node2:/dbms/pg12/pgdata]$pg_probackup restore -B /dbms/pg_probackup_dir/ --instance pg01 --recovery-target=latest
INFO: Validating parents for backup RZJ9XV
INFO: Validating backup RZJ9NF
INFO: Backup RZJ9NF data files are valid
INFO: Validating backup RZJ9XV
INFO: Backup RZJ9XV data files are valid
INFO: Backup RZJ9XV WAL segments are valid
INFO: Backup RZJ9XV is valid.
INFO: Restoring the database from backup at 2023-08-17 19:44:19+08
INFO: Start restoring backup files. PGDATA size: 448MB
INFO: Backup files are restored. Transfered bytes: 170MB, time elapsed: 1s
INFO: Restore incremental ratio (less is better): 38% (170MB/448MB)
INFO: Syncing restored files to disk
INFO: Restored backup files are synced, time elapsed: 1s
INFO: Restore of backup RZJ9XV completed.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。