暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

pg备份工具:pg_rman、pgbackrest和pg_probackup (1)

原创 jieguo 2023-01-31
1661

pg备份工具:pg_rman、pgbackrest和pg_probackup (1)

先看看pg_rman
参考:https://blog.csdn.net/qq_35260875/article/details/106093958
https://www.modb.pro/db/499960
工具 | 常用 PostgreSQL 预防数据丢失方案

1.介绍
PostgreSQL已经支持类似的Oracle的rman的备份工具的功能,支持全量,增量,归档三种备份模式,支持压缩,支持备份集的管理等。
pg_rman使用的是pg_start_backup(),copy,pg_stop_backup()的备份模式,pg_rman跑的不是流复制协议,而是文件拷贝,所以pg_rman必须和数据库节点跑在一起。如果在待机节点跑pg_rman,pg_rman则需要通过网络连接到主节点执行pg_start_backup和pg_stop_backup.pg_rman的用法非常简单,支持以下几种运行模式。
pg_rman常用命令

pg_rman [ OPTIONS ] { init |
backup |
restore |
show [ DATE | detail ] |
validate [ DATE ] |
delete DATE |
purge }

  • init:初始化备份目录。
  • backup:进行在线备份。
    -b, --backup-mode=MODE full, incremental, or archive
    -s, --with-serverlog also backup server log files
    -Z, --compress-data compress data backup with zlib
    -C, --smooth-checkpoint do smooth checkpoint before backup
    -F, --full-backup-on-error switch to full backup mode if pg_rman cannot find validate full backup on current timeline NOTE: this option is only used in --backup-mode=incremental or archive.
    –keep-data-generations=NUM keep NUM generations of full data backup --keep-data-days=NUM keep enough data backup to recover to N days ago --keep-arclog-files=NUM keep NUM of archived WAL
    –keep-arclog-days=DAY keep archived WAL modified in DAY days
    –keep-srvlog-files=NUM keep NUM of serverlogs
    –keep-srvlog-days=DAY keep serverlog modified in DAY days
    –standby-host=HOSTNAME standby host when taking backup from standby
    –standby-port=PORT standby port when taking backup from standby
  • restore:恢复。
    –recovery-target-time time stamp up to which recovery will proceed --recovery-target-xid transaction ID up to which recovery will proceed --recovery-target-inclusive whether we stop just after the recovery target --recovery-target-timeline recovering into a particular timeline --hard-copy copying archivelog not symbolic link
  • show:显示备份历史记录 详细信息选项显示每个备份的附加信息。
  • validate:验证备份文件。未经验证的备份不能用于还原和增量备份。
  • delete:删除备份文件。
  • purge:从备份目录中删除已删除的备份
    2.使用
    (1) 初始化备份目录
    pg_rman init -B
    建议在初始化备份目录之前进行设置log_directory,archive_mode并archive_command在postgresql.conf中进行设置。如果变量已初始化,则pg_rman可以将配置文件调整为该设置。在这种情况下,您必须为PostgreSQL指定数据库集群路径。请在PGDATA环境变量或-D/ --pgdata选项中指定。

(2) 备份模式

完全备份:备份整个数据库集群。

pg_rman backup -b full

增量备份:仅备份使用相同时间轴在上次验证备份后修改的文件或页面。

pg_rman backup -b incremental

存档WAL备份:仅备份存档WAL文件。

pg_rman backup -b archive

备份集校验(建议在备份后尽快验证备份文件。未验证的备份不能用于还原或增量备份)

pg_rman validate

(3) 查看备份集
pg_rman show

pg_rman show detail
(显示更多详细信息)

 相关参数含义:
 * StartTime:备份开始时的时间戳
 * EndTime:备份结束时的时间戳
 * Mode:备份模式。
 * FULL:完全备份
 * INCR:增量备份
 * ARCH:归档WAL备份
 * Data:读取数据文件的大小
 * ArcLog:读取存档WAL文件的大小
 * SrvLog:读取服务器日志文件的大小
 * Total:备份大小(=书面大小)
 * Compressed:备份是否已压缩
 * TLI / CurTLI:PostgreSQL的时间轴ID
 * ParentTLI:PostgreSQL的前时间轴ID
 * Status:备份状态。可能的值是:
 * OK:备份已成功完成并经过验证。
 * DONE:备份成功完成。
 * RUNNING:备份仍在运行。
 * DELETING:正在删除备份。
 * DELETED:备份已被删除。
 * ERROR:备份期间发生一些错误。
 * CORRUPT:备份不可用,因为它没有通过验证。

pg_rman show ‘2019-03-20 12:10:01’
指定日期可以查看备份的详细信息

(4) 删除备份集
按指定时间从catalog删除备份集
例如我只需要我的备份集能恢复到2017-08-30 17:27:49,在这个时间点以前,不需要用来恢复到这个时间点的备份全删掉。但是会保留一次全备份。加上-f会强制删除

pg_rman delete “2017-08-30 17:27:49”
根据备份策略来删除备份集

修改配置文件— pg_rman.ini
KEEP_DATA_GENERATIONS = 3 – 备份集冗余度是3
KEEP_DATA_DAYS = 10 – 备份集保留日期是10d

(5) 清除备份集(删除已删除的备份)
虽然delete命令从文件系统中删除了实际数据,但是仍然有一些已删除备份的目录信息,需要执行purge命令来删除。
pg_rman purge

(6) 备份恢复
pg_rman将备份数据还原到目标数据库集群路径。
应该在恢复之前停止pg。此外,不要删除原始数据库集群,因为pg_rman必须从中检查时间轴ID或数据校验和状态。Restore命令将保存未归档的事务日志并删除所有数据库文件。您可以重试恢复,直到进行新备份。恢复文件后,pg_rman在中创建PGDATA/recovery.conf。conf文件包含要恢复的参数,可以根据需要修改该文件。 建议在恢复成功后尽快进行完整备份。 如果--recovery-target-timeline未指定,则控制文件(PGDATA/global/pg_control)中的最后一个检查点的TimeLineID 将是还原目标。如果pg_control不存在,则还原使用的完整备份中的TimeLineID将是还原目标。
指定时–recovery-target-time,请确保指定大于(或等于)要用作基础的完整备份的EndTime的时间戳。

恢复时,需要注意,你可以选择原地恢复(覆盖式),或者使用新的PGDATA作为恢复目标。 但是请注意,不管是哪种恢复方式,如果在本机恢复的话,pg_rman可能会覆盖原有的数据文件,arch, pg_xlog目录中的文件,所以,如果你要保留原数据,建议先将原数据目录重命名。 注:进行备份恢复之后,不能进行全量备份,需要进行增量备份 原地恢复 使用新的PGDATA全恢复

需要删除$PGDATA下的文件

pg_rman restore

必须要先停止postgresql 不然会报错 ERROR: PostgreSQL server is running

恢复到指定时间戳:

pg_rman restore --recovery-target-time “2019-02-15 13:56:45” --hard-copy

根据xid 来恢复:

pg_rman restore --recovery-target-xid 1821

恢复之后,重启数据库:会出现以下内容:

此时数据库进入只读状态。
需要执行以下命令才能继续
select pg_wal_replay_resume();

(7) pg_rman.ini
参数配置文件 设置留存期
COMPRESS_DATA = YES
KEEP_ARCLOG_FILES = 7
KEEP_ARCLOG_DAYS = 7
KEEP_DATA_GENERATIONS = 3
KEEP_DATA_DAYS = 7
KEEP_SRVLOG_FILES = 7
KEEP_SRVLOG_DAYS = 7

最后修改时间:2023-01-31 15:51:08
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论