PostgreSQL物理备份-pg_rman

1.简介

pg_rman 是类似于 oracle 的 rman 备份工具,它实现了全量、增量、归档等类型的备份,
可以很灵活的管理 PostgreSQL 数据库的备份。pg_rman 是一款开源的 PostgreSQL 的
备份恢复插件,支持在线备份和基于 PITR 的恢复方式。

2.pg_rman特点

 使用简单,一个命令即可完成备份和恢复. 
 支持在线全备,增量备份,归档备份. 
 支持备份压缩,通过 gzip 工具实现页内压缩. 
 自动备份维护,自动删除过期的 WAL 备份文件. 
 支持备份验证. 
 恢复期间无事务丢失,支持基于 PITR 的恢复 
pg_rman 注意事项: 
 pg_rman 基于 pg_start_backup,copy,pg_stop_backup()的备份模式,因为是文
件拷贝模式,而不是流复制协议,所以 pg_rman 必须在数据库节点上运行。
 pg_rman 需要在本地安装,不能远程备份 
 pg_rman 需要下载对应的版本 

3.pg_rman命令选项

命令选项: 
 -D, --pgdata=PATH # 数据目录
-A, --arclog-path=PATH # 归档 wal 目录 
 -S, --srvlog-path=PATH # 数据库服务器日志路径 
 -B, --backup-path=PATH # 备份目录 
 -c, --check # 检查 
 -v, --verbose # 显示详细消息 
 -P, --progress # 显示处理进度 
备份选项: 
 -b, --backup-mode=MODE # 备份模式:全备,增备,归档 
 -s, --with-serverlog # 备份服务器日志文件 
 -Z, --compress-data # 使用 zlib 压缩数据备份 
 -C, --smooth-checkpoint # 在备份前做平滑检查点 
 -F, --full-backup-on-error # 切换到完全备份模式,注意:此选项仅用于--backupmode = incremental 或 archive 
 --keep-data-generations=2 # 保留 2 份全备 
 --keep-data-days=15 # 备份保留 15 天 
 --keep-arclog-files=NUM # 保留 NUM 个归档日志 
 --keep-arclog-days=DAY # 归档 WAL 保留多久 
 --keep-srvlog-files=NUM # 保留 NUM 个服务器日志 
 --keep-srvlog-days=DAY # 服务器日志保留多久 
 --standby-host=HOSTNAME # 指定备库 IP
--standby-port=PORT # 指定备库端口 
还原选项: 
--recovery-target-time # 恢复到指定时间戳 
--recovery-target-xid # 恢复到指定事务 ID 
--recovery-target-inclusive # 是否包含恢复目标 
--recovery-target-timeline # 恢复到特定的时间线 
--hard-copy # 复制 archivelog 而不是符号链接 
目录选项: 
 -a # 显示已删除的备份 
删除选项: 
 -f # 强制删除比规定日期更旧的备份 
连接选项: 
 -d, --dbname=DBNAME # 连接指定库 
 -h, --host=HOSTNAME # 数据库主机名/IP 地址 
 -p, --port=PORT # 数据库端口 
 -U, --username=USERNAME # 数据库用户名 
 -w, --no-password # 不提示密码
 -W, --password # 强制密码提示 
通用选项: 
-q, --quiet # 不显示任何 INFO 或者 DEBUG 信息。 
--debug # 查看 debug 信息。

4.安装pg_rman

软件下载: https://github.com/ossc-db/pg_rman
文档地址: http://ossc-db.github.io/pg_rman/index.html
源码安装:
wget -c https://github.com/ossc-db/pg_rman/archive/refs/heads/master.zip 
cd pg_rman 
export PATH=/usr/local/pgsql/bin:$PATH 
make 
make install
pg_rman 会默认安装在/usr/local/pgsql/bin/目录下
[root@pghost ~]# which pg_rman 
/usr/local/pgsql/bin/pg_rman

RPM安装

wget -c https://github.com/osscdb/pg_rman/releases/download/V1.3.15/pg_rman-1.3.15-1.pg14.rhel8.x86_64.rpm 

wget -c https://github.com/osscdb/pg_rman/releases/download/V1.3.15/pg_rman-debuginfo-1.3.15-1.pg14.rhel8.x86_64.rpm 

yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 
yum makecache 
yum -y install pg_rman-1.3.15-1.pg14.rhel8.x86_64.rpm 
yum -y install pg_rman-debuginfo-1.3.15-1.pg14.rhel8.x86_64.rpm

vi /etc/profile 
export PATH=/usr/pgsql-14/bin:$PATH 
source /etc/profile

配置环境变量

su - postgres 
vi .bashrc 
export BACKUP_PATH=/home/postgres/backups 
export ARCLOG_PATH=/home/postgres/archives 
export SRVLOG_PATH=/home/postgres/pgdata/log
--让环境变量生效 
source .bashrc

配置pg_rman

1.开启数据库归档模式

mkdir /home/postgres/backups 
mkdir /home/postgres/archives 
vi postgresql.conf 
archive_mode = on 
archive_command = 'cp %p /home/postgres/archives/%f' 
pg_ctl restart
注意:如果不开启归档模式在初始化备份目录的时候会出现下面的警告信息。
pg_rman init --backup-path=/home/postgres/backups 
WARNING: ARCLOG_PATH is not set yet 
DETAIL: The archive_command is not set in postgresql.conf. 
HINT: Please set ARCLOG_PATH in pg_rman.ini or environmental variable. 
INFO: SRVLOG_PATH is set to '/home/postgres/pgdata/log'

2.初始化备份目录

初始化一个 backup catalog,目录将用于存放备份的文件,也会存放一些元数据,例如
备份的配置文件,数据库的 systemid,时间线文件历史。
注意:备份目录不要放在数据目录下,否则每备份都会将之前的备份再备份一遍,从而导
致备份文件异常增大
[postgres@pghost ~]$ pg_rman init --backup-path=/home/postgres/backups 
INFO: ARCLOG_PATH is set to '/home/postgres/archives' 
INFO: SRVLOG_PATH is set to '/home/postgres/pgdata/log' 
[postgres@pghost backups]$ ll 
总用量 8 
drwx------. 4 postgres postgres 34 3 月 19 16:36 backup 
-rw-rw-r--. 1 postgres postgres 74 3 月 19 16:36 pg_rman.ini 
-rw-rw-r--. 1 postgres postgres 40 3 月 19 16:36 system_identifier 
drwx------. 2 postgres postgres 6 3 月 19 16:36 timeline_history
在 catalog 中有 pg_rman.ini 文件,可配置备份的环境变量、备份选项、备份集保留期限
等信息。
[postgres@pghost backups]$ cat pg_rman.ini 
ARCLOG_PATH='/home/postgres/archives' --归档目录 
SRVLOG_PATH='/home/postgres/pgdata/log' --数据库错误日志目录
COMPRESS_DATA = YES --压缩数据 
KEEP_ARCLOG_FILES = 10 --保存归档文件个数 
KEEP_ARCLOG_DAYS = 15 --保存归档的天数 
KEEP_DATA_GENERATIONS = 2 --备份冗余度
KEEP_DATA_DAYS = 15 --保存备份集时间
KEEP_SRVLOG_FILES = 10 --保存日志文件个数 
KEEP_SRVLOG_DAYS = 15 --保存日志文件天数

5.pg_rman备份 

全量备份
如果没有设置环境变量(BACKUP_PATH),需要手动指明备份路径 --backup
path=/home/postgres/backups
pg_rman backup --backup-mode=full --全量备份 
pg_rman show --查看备份集的状态 
pg_rman show detail --显示更多详细信息 
pg_rman show '2023-03-20 10:00:00' --指定日期可以查看备份的详细信息
pg_rman validate --校验备份集的有效性
未校验备份集 Status 显示为 DONE,校验后变为 OK
注意:每次备份的时候会创建一个当天日期的目录,然后目录下面创建一个与当前时间一
致的目录。
在做备份操作时,建议使用参数
-C, 备份前做检查点
-Z, 使用 zlib 压缩数据备份
增量备份
仅备份上次验证备份后修改的文件或页面。
pg_rman backup --backup-mode=incremental --with-serverlog 
--with-serverlog 表示将数据库日志文件一起备份 
注意: 创建增量备份之前必须先创建一个全量备份。 
pg_rman show 
pg_rman validate

归档备份

仅备份存档 WAL 文件
pg_rman backup --backup-mode=archive

6.备份管理

按指定时间从 catalog 删除备份集
例如只需要备份集能恢复到 2023-03-19 16:46:58,在这个时间点以前,不需要用来恢复
到这个时间点的备份全删掉。但是会保留一次全备份。加上-f 会强制删除
[postgres@pghost ~]$ pg_rman delete 2023-03-19 16:46:58 
WARNING: using force option will make some of the remaining backups unusable 
DETAIL: Any remaining incremental backups that are older than the oldest 
available full backup cannot be restored. 
INFO: delete the backup with start time: "2023-03-19 16:46:58" 
[postgres@pghost ~]$ pg_rman show 
=====================================================
================ 
 StartTime EndTime Mode Size TLI Status 
=====================================================
================
注意: 删除增量备份的同时,也会把全量备份给删除了。
清除备份集(删除已删除的备份)
虽然 delete 命令从文件系统中删除了实际数据,但是仍然有一些已删除备份的目录信息,
需要执行 purge 命令来删除。
pg_rman show -a 
pg_rman purge 
pg_rman show -a
备份集校验(建议在备份后尽快验证备份文件。未验证的备份不能用于还原或增量备份)
备份成功后,其状态是 done,还需要进行 validate 操作后,备份集才可用于恢复,增量
备份才会用于做对比。
pg_rman validate

 7.定时备份

在生产环境中,需制定备份策略,通常每周全备,每天增量,同时备份归档日志
# 设置备份任务 
crontab -e 
#分 时 日 月 星期 命令/脚本 
00 22 * * 0 pg_rman backup --backup-mode=full 
00 22 * * 1-6 pg_rman backup --backup-mode=incremental

7.pg_rman恢复

pg_rman 恢复默认原地恢复(覆盖式),或者使用新的$PGDATA 作为恢复目标。
建议不要删除原始数据库,因为 pg_rman 必须从中检查时间轴 ID 或数据校验和状态。
Restore 命令将保存未归档的事务日志并删除所有数据库文件。
1、recovery-target-timeline TIMELINE
如果不指定时间线,则使用$PGDATA/global/pg_control,如果没有
$PGDATA/global/pg_control,则使用最新的全量备份集的时间线。
2、recovery-target-time TIMESTAMP
如果不指定,则恢复到最新时间
3、recovery-target-xid XID
如果不指定,则恢复到最新 xid
4、recovery-target-inclusive
是否在指定的恢复目标(true)之后停止,默认为 true,如果指定 false 意识是在恢复目
标之前停止
–hard-copy
在做恢复操作时,建议使用此参数
如果不指定 hard-copy,则归档日志目录里的归档日志是使用的硬连接指向备份目录中的
归档日志,加了这个参数的话,则是直接把备份目录中的归档日志拷贝到归档日志目录。
恢复数据库
先停用数据库服务,然后删除数据库文件
必须要先停止 postgresql 不然会报错 ERROR: PostgreSQL server is running 
pg_ctl stop 
rm -rf $PGDATA/* 
pg_rman restore --全量恢复 
pg_rman restore --recovery-target-time='2022-11-29 15:47:42' --恢复到指定时间点
恢复之后,重启数据库:会出现以下内容:
此时数据库进入只读状态。
需要执行以下命令才能继续
select pg_wal_replay_resume();
注意:
在基于时间点恢复之后,那么此时 DB 与之前的备份已经不在同一时间线上。恢复默认只
沿着基础备份建立时时间线恢复而不会切换到新的时间线,所以建议在恢复之后,立即对
数据库做一个全库的备份。

保留策略:

清除归档
清除指定归档之前的归档日志:
pg_archivecleanup /home/postgres/archive 000000010000000000000003
也可以在 postgresql.conf 文件中添加自动清除归档的命令:
archive_cleanup_command = 'pg_archivecleanup /home/postgres/archives %r'
修改备份策略
[postgres@pghost backups]$ vi pg_rman.ini
KEEP_DATA_GENERATIONS=2 
KEEP_DATA_DAYS=15 
KEEP_ARCLOG_DAYS=15 
KEEP_SRVLOG_DAYS=30
参数说明:
KEEP_DATA_GENERATIONS=2,保留 2 份以前全备数量,加上正在执行的全备,实际上
有 3 份全备
KEEP_DATA_DAYS=15,数据保留 15 天
KEEP_ARCLOG_DAYS=15,WAL 日志保留 15 天
KEEP_SRVLOG_DAYS=30,LOG 日志保留 30 天数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/752639.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

高性能Web服务器-Nginx的常用模块

文章目录 Nginx安装Nginx平滑升级与回滚平滑升级流程第1步,下载新版本第2步,编译第3步,执行make第4步,对比新旧版本第5步,备份旧nginx二进制文件第6步,模拟用户正在访问nginx第7步,替换旧的ngin…

航空电子制造业企业数字化转型:智能工厂建设

引言 航空电子制造业是航空工业的重要组成部分,涵盖了飞机的电子系统、导航设备、通信系统、自动驾驶仪等关键组件。自20世纪中期以来,航空电子技术经历了快速发展,从最初的机械和模拟设备逐步过渡到数字化、网络化和智能化系统。现代航空电子…

python办公自动化之excel

用到的库:openpyxl 实现效果:读取单元格的值,写入单元格 代码: import openpyxl # 打开现有工作簿 workbookopenpyxl.load_workbook(现有工作簿.xlsx) # 选择一个工作表 sheetworkbook[交易表] # 读取单元格的值 cell_valueshe…

海南云亿商务咨询有限公司深度解读抖音电商

在当今数字化飞速发展的时代,电商行业早已成为经济发展的重要引擎。而在众多电商平台中,抖音以其独特的短视频直播形式,成为了众多商家和消费者的新宠。海南云亿商务咨询有限公司,正是这一领域的佼佼者,专注于抖音电商…

vue3【实战】创建项目、创建并提交代码到远程仓库,安装 SASS, 清除浏览器默认样式 reset-css, 清除模板代码,提升开发效率的必要集成

新建远程仓库(码云) https://gitee.com/ 得到远程仓库地址 https://gitee.com/sunshine39/ec-web-vue3.git创建项目 vscode 安装插件 vue3-snippets-for-vscode安装 node v20.12.2设置淘宝镜像 npm config set registry https://registry.npmmirror.c…

【中项第三版】系统集成项目管理工程师 解析指南 | 报考 | 备考 | 总结

💡💡💡 重要通知 💡💡💡 🌺🌺🌺 2024下半年 使用《系统集成项目管理工程师教程》第三版 🌺🌺🌺 🚀🚀&#x1…

tauri使用github action实现跨平台编译并解决编译错误等问题

正常编译为跨平台结果就像上面的,有mac/windows/linux的安装程序,直接下载就可以安装使用,我的这个livebox桌面端仓库地址:GitHub - Sjj1024/LiveBox: livebox,里面有编译文件可以参考。今天主要讲一下遇到的问题。 官…

目标检测算法之RT-DETR

RT-DETR算法理解 BackgroundModel ArchitectureEfficient Hybrid EncoderUncertainty-minimal Query Selection 总结 Background Real-time Detection Transformer(RT-DETR)是一个基于tranformer的实时推理目标检测模型。RT-DETR是2023年百度发布的一个…

【MTK平台】如何学习Bluedroid A2DP Code

一 Bluedroid A2DP架构图 备注: vendor/mediatek/proprietary/packages/modules/Bluetooth/system/audio_a2dp_hw/src 目录下编译生成audio.a2dp.default.so,主要实现a2dp做为设备的功能 二 A2DP File Hierarchy ModuleFileDescriptionAudio HAL (hardware/libhardware/…

小程序发布必须进行软件测试吗?测试内容有哪些?

在如今移动互联网时代,小程序已成为许多企业广泛采用的一种营销手段,然而,发布小程序之前进行充分的软件测试是至关重要的,因为它不仅可以确保小程序的质量,还可以避免潜在的风险和损失。 在进行小程序发布前进行软件…

【大模型】大模型微调方法总结(四)

1. P-Tuning v1 1.背景 大模型的Prompt构造方式严重影响下游任务的效果。比如:GPT-3采用人工构造的模版来做上下文学习(in context learning),但人工设计的模版的变化特别敏感,加一个词或者少一个词,或者变…

DIY:在您的 PC 上本地使用 Stable Diffusion AI 模型生成图像

前言 随着DALL-E-2和Midjourney的发布,您可能听说过最近 AI 生成艺术的繁荣。这些人工智能模型如何在几秒钟内创造性地生成逼真的图像,这绝对是令人兴奋的。您可以在这里查看其中的一些:DALL-E-2 gallery和Midjourney gallery 但是这些模型…

DAY16-力扣刷题

1.不同的二叉搜索树2 95. 不同的二叉搜索树 II - 力扣(LeetCode) 给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 。可以按 任意顺序 返回答案。 方法一:回溯 class Solutio…

聚观早报 | iPhone 16核心硬件曝光;三星Galaxy全球新品发布会

聚观早报每日整理最值得关注的行业重点事件,帮助大家及时了解最新行业动态,每日读报,就读聚观365资讯简报。 整理丨Cutie 6月28日消息 iPhone 16核心硬件曝光 三星Galaxy全球新品发布会 苹果正多方下注布局AI商店 黄仁勋2024年薪酬3400…

Kotlin设计模式:深入理解桥接模式

Kotlin设计模式:深入理解桥接模式 在软件开发中,随着系统需求的不断增长和变化,类的职责可能会变得越来越复杂,导致代码难以维护和扩展。桥接模式(Bridge Pattern)是一种结构型设计模式,它通过…

Nest 的 IoC 机制

后端系统中,会有很多对象: Controller 对象:接收 http 请求,调用 Service,返回响应 Service 对象:实现业务逻辑 Repository 对象:实现对数据库的增删改查 此外,还有数据库链接对…

【吊打面试官系列-MyBatis面试题】MyBatis 框架的缺点?

大家好,我是锋哥。今天分享关于 【MyBatis 框架的缺点?】面试题,希望对大家有帮助; MyBatis 框架的缺点? 1、SQL 语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写 SQL 语句的功底…

工作备忘录哪个好用 好用的工作备忘录

在繁忙的工作环境中,备忘录就像是我手中的一把利剑,助我斩断杂乱的思绪,让工作变得井井有条。每当任务堆积如山,或是灵感与琐事交织时,我总会依赖我的备忘录来帮我理清头绪。 想象一下,你正忙于一个大型项…

小区物业管理收费系统源码小程序

便捷、透明、智能化的新体验 一款基于FastAdminUniApp开发的一款物业收费管理小程序。包含房产管理、收费标准、家属管理、抄表管理、在线缴费、业主公告、统计报表、业主投票、可视化大屏等功能。为物业量身打造的小区收费管理系统,贴合物业工作场景,轻…

RabbitMQ实践——搭建单人聊天服务

大纲 创建Core交换器用户登录发起聊天邀请接受邀请聊天实验过程总结代码工程 经过之前的若干节的学习,我们基本掌握了Rabbitmq各个组件和功能。本文我们将使用之前的知识搭建一个简单的单人聊天服务。 基本结构如下。为了避免Server有太多连线导致杂乱,下…
最新文章