一、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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
PostgreSQL初/中/高级认证考试(3.15)通过考生公示
开源软件联盟PostgreSQL分会
402次阅读
2025-03-20 09:50:36
9.9 分高危漏洞,尽快升级到 pgAdmin 4 v9.2 进行修复
严少安
312次阅读
2025-04-11 10:43:23
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
307次阅读
2025-04-15 14:48:05
openHalo问世,全球首款基于PostgreSQL兼容MySQL协议的国产开源数据库
严少安
248次阅读
2025-04-07 12:14:29
IvorySQL 4.4 发布 - 基于 PostgreSQL 17.4,增强平台支持
通讯员
237次阅读
2025-03-20 15:31:04
PG vs MySQL 执行计划解读的异同点
进击的CJR
173次阅读
2025-03-21 10:50:08
postgresql+patroni+etcd高可用安装
necessary
135次阅读
2025-03-28 10:11:23
手把手教你在 openKylin 上部署 IvorySQL 4.4
严少安
131次阅读
2025-03-27 20:41:28
从 Oracle 到 PostgreSQL迁移成本评估揭秘
梧桐
127次阅读
2025-03-27 17:21:42
转发有奖 | PostgreSQL 16 PGCM高级认证课程直播班招生中!
墨天轮小教习
122次阅读
2025-04-14 15:58:34