pgsql备份工具:pg_rman在Linux下的安装、设置与使用

2023-11-04

pg_rman是PostgreSQL的在线备份和恢复工具。

pg_rman项目的目标是提供一种像pg_dump一样简单的在线备份和PITR方法。

它就是pgsql实现全量备份和增量备份的最简易的工具。

github地址:https://github.com/ossc-db/pg_rman

操作思想:

因为pgsql是建议使用postgres用户对pgsql进行使用,所以尽量避免使用root用户去操作数据库。所以pg_rman安装在root用户下之后,我们要切换到postgres用户下去使用它。那么pgsql和pg_rman的相关文件夹要赋予权限给postgres用户。

1.环境准备

1.1 postgres的设置

设置pgsql的配置文件,使得:archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'

这个参数设置的是用来表示wal文件归档命令,会被pg_rman使用。命令中的“/mnt/server/archivedir”目录可以配置到任意自己想要的目录。

a.先寻找配置文件位置
root@VM-20-13-ubuntu: locate postgresql.conf

结果如下图,红框就是它的位置:

b.使用vim进行配置文件编辑
root@VM-20-13-ubuntu: vim /etc/postgresql/10/main/postgresql.conf
c.使用“/”进行搜索archive_command
/archive_command

结果如下图:

d.配置archive_command的值。这里可以自己把文件cp的路径改成自己喜欢的路径。
archive_command = 'test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f'
e.继续设置文档中的值wal_level和archive_mode

设置:

wal_level = replica
archive_mode = on
d.去建立该wal文件存储路径,并赋予权限

这一步非常重要,如果没有赋予wal文件存储路径给postgres权限的话,在postgres用户下的pgsql根本没有权限去写wal文件进入该文件夹。

root@VM-20-13-ubuntu: mkdir -p /mnt/server/archivedir
root@VM-20-13-ubuntu: chown postgres:postgres -R /mnt/server/archivedir
root@VM-20-13-ubuntu: su postgres -c "chmod 700 -R /mnt/server/archivedir"
e.重启pgsql
root@VM-20-13-ubuntu: service postgresql restart 

2.下载pg_rman

2.1查看pgsql的版本:

root@VM-20-13-ubuntu: su postgres
postgres@VM-20-13-ubuntu:/$ psql --version

结果如下图,我用的是psql 10 的版本:

2.2 去github上获取pg_rman的对应版本

a.打开网站:https://github.com/ossc-db/pg_rman

b.点击这里:

c.我使用的是10版本,所以在最新的V1.3.15版本中没找到10版本:

d.于是我在历史的v 1.3.14中找到10版本:

e.然后我们下载source文件,因为rpm文件不好在ubuntu系统上安装。

3.安装pg_rman

3.1把刚才下载的文件放到Linux服务器上,然后解压

postgres@VM-20-13-ubuntu:/$ su root
密码输入
root@VM-20-13-ubuntu: tar xzvf pg_rman-1.3.14-pg10.tar.gz -C ./

3.2 解压完进入解压出来的文件夹./pg_rman-1.3.14-pg10

root@VM-20-13-ubuntu: cd ./pg_rman-1.3.14-pg10

3.3 按着readme.md指示操作

3.4 make

root@VM-20-13-ubuntu: make
这里make的时候我报了很多错:
a.没找到postgres_fe.h

解决方案:

root@VM-20-13-ubuntu: apt install postgresql-server-dev-10

这命令中的10是pgsql的版本号,我是用10版本就写10 ,如果是别的版本就自己改成别的版本号。

b.动态链接库的缺失

解决方案:

先 locate lib缺的库的名字.so

然后使用ln -s 去建立该库的软连接

eg.比如我刚才上图的 cannot find -lselinux 说明缺少的是selinux库(-l后面的就是缺少的库)

所以我要找libselinux.so(lib+库名+.so)

所以要:

root@VM-20-13-ubuntu: locate libselinux.so

结果:发现一个libselinux.so.1的位置,如下图:

那直接ln -s去建立真正的软连接

root@VM-20-13-ubuntu: ln -s /lib/x86_64-linux-gnu/libselinux.so.1 /lib/x86_64-linux-gnu/libselinux.so

然后make一下看看是否成功:

成功结果:

3.5 make install

root@VM-20-13-ubuntu: make install

成功结果:

4.初始化pg_rman

a.寻找pgsql的data文件夹路径,首先进入数据库。
root@VM-20-13-ubuntu: su postgres
postgres@VM-20-13-ubuntu:/$ psql
b.查找数据目录
postgres=# show data_directory;

结果如图:/var/lib/postgresql/10/main

c.设置pg_rman的备份文件夹目录,我这里设置为/home/backup_home/pgsql/pgrman_data(自己随便创建)。设置pgsql的data文件夹路径为/var/lib/postgresql/10/main。
postgres=# \q
postgres@VM-20-13-ubuntu:/$ su root
root@VM-20-13-ubuntu: pg_rman init -B /home/backup_home/pgsql/pgrman_data -D /var/lib/postgresql/10/main

结果一般为:

这里是说ARCLOG_PATH没有设置,因为它没检测到archive_command,那我们就直接去设置pg_rman.ini。

root@VM-20-13-ubuntu:~# vim /home/backup_home/pgsql/pgrman_data/pg_rman.ini

添加(自己酌情设置):

ARCLOG_PATH='/mnt/server/archivedir' 
BACKUP_PATH='/home/backup_home/pgsql/pgrman_data' # 设置backup—path以后使用pg_rman不用-B
PGDATA='/var/lib/postgresql/10/main' # 设置PGDATA以后使用pg_rman不用-D
compress_data=yes # 数据压缩
with-serverlog=yes
smooth-checkpoint=yes
keep-data-days=30 # 时间窗口,备份需要保证数据库可以恢复到时间窗口内的任意时间点
keep-arclog-days=30 # 保留几天内的归档文件
keep-srvlog-days=30 # 保留几天内的数据库日志文件
# keep-data-generations # 保留几代全备,如果设置为2,本次备份后不会删除上次备份
# keep-arclog-files # 保留多少个归档文件
# keep-srvlog-files # 保留几个数据库日志文件
d.开一下路径的权限:
root@VM-20-13-ubuntu: chown postgres:postgres -R /home/backup_home/pgsql
root@VM-20-13-ubuntu: su postgres -c "chmod 777 -R /home/backup_home/pgsql"

5.测试是否成功

登录一下postgres:

root@VM-20-13-ubuntu:~# su postgres
postgres@VM-20-13-ubuntu:/$ source /etc/profile

5.1全量备份测试:

postgres@VM-20-13-ubuntu:/$ pg_rman backup --backup-mode=full

成功结果:

它提示我们进行校验,那就进行校验:

postgres@VM-20-13-ubuntu:/$ pg_rman validate

成功结果:

5.2增量备份测试

增量备份之前必须有对应的全量备份。

pg_rman backup --backup-mode=incremental --progress

成功结果:

进行校验:

postgres@VM-20-13-ubuntu:/$ pg_rman validate

成功结果:

5.3查看备份的数据集

我们可以用pg_rman show查看备份的数据集:

postgres@VM-20-13-ubuntu:/$ pg_rman show

成功结果:

未校验备份集 Status 显示为 DONE,校验完成为OK,上图显示全部校验完成。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pgsql备份工具:pg_rman在Linux下的安装、设置与使用 的相关文章

  • 在官方 Postgres docker 镜像中记录所有查询

    我有一个基于 Postgres 官方 docker 镜像的 docker 容器 当我使用查看 docker 容器的日志时 我想看到传入的查询docker logs f 这是我的 Dockerfile FROM postgres 11 1 a
  • psql:致命:角色“vagrant”不存在[重复]

    这个问题在这里已经有答案了 我创建了一个流浪实例 每次尝试时都会收到此错误psql在终端如何修复它 错误如下 psql 致命 角色 vagrant 不存在 我以为流浪汉会照顾这个 这是我的流浪文件 Vagrant require plugi
  • 如何更改 PostgreSQL 表中列的数据类型?

    在 PostgreSQL 交互式终端中输入以下命令会导致错误 ALTER TABLE tbl name ALTER COLUMN col name varchar 11 更改列的数据类型的正确命令是什么 请参阅此处的文档 http www
  • Docker:保留命令历史记录

    Every time I build a Docker container the command history CTRL R in Ubuntu is lost Is there a way to prevent it from res
  • 我应该使用包管理器还是从源代码在 Ubuntu 上安装 node.js?

    有谁知道从源代码安装最新版本是否是一条危险的路线 我应该坚持使用包管理器吗 目前的建议 Use 在 Linux 上安装节点 https github com dweldon install node on linux如果您想要使用您的用户帐
  • 程序“gem”可以在以下软件包中找到

    我正在 Virtual Box Ubuntu 13 10 上安装 Ruby on Rails 以下是步骤 ruby v gt 程序 ruby 可以在以下软件包中找到 尝试 sudo apt get install 来源 我的帐户 gt 好的
  • 与 PostgreSQL CTE 的一般并行性

    我正在处理一些大数据 并且在查询中获取并行计划是必要的 我也很喜欢使用 CTE 来表达我的查询 但根据 PostgreSQL 的文档 我不太确定 CTE 是否对并行性造成严重限制 Here https www postgresql org
  • 如果未找到值,则使用默认值填充行 PostgresQL

    我想返回过去 7 天的 user activity 但对于那些空的日子我想添加 0 作为值 假设我有这张桌子 actions id date 67 123 2019 07 7 90 123 2019 07 9 100 123 2019 07
  • 如何使用 keyTextTransform() 进行嵌套 json?

    我的模型有一个 json 字段 我可以使用以下查询访问 jsonfield key1 from django contrib postgres fields jsonb import KeyTextTransform MyModel obj
  • PostgreSQL C 函数建议

    有人可以给我一个关于自定义函数的初步尝试的提示吗 我需要用 2 个参数构造查询 一个 varchar 和一个 unix 时间戳 一个整数 我花了 3 个小时才得到下面的几行结果 查询测试可以是 select from pdc posot c
  • PostgreSQL Age() 函数:在不同月份登陆时出现不同/意外的结果

    今天 我在 PostgreSQL 9 6 中运行此查询时遇到了无法解释的结果 SELECT age 2018 06 30 2018 05 19 AS one age 2018 07 01 2018 05 20 AS two 两列的预期结果
  • PostgreSQL 函数/存储过程 CURRENT_TIMESTAMP 不变

    我想跟踪函数内的执行时间 作为示例 我有以下状态跟踪表 CREATE TABLE status table run id numeric NOT NULL start ts timestamp 6 without time zone NOT
  • vim 中的 python 2 支持

    我正在尝试设置 YouCompleteMe 一个 vim 代码完成插件 当我运行 vim 时 它给我这个错误消息 YouCompleteMe unavailable 需要 python 2 x 我的 ubuntu 机器上安装了正确版本的 p
  • 如何查找 PostgreSQL 数据库的上次更新时间?

    我正在使用一个批量更新的 postgreSQL 数据库 我需要知道数据库 或数据库中的表 上次更新或修改的时间 两者都可以 我看到 postgreSQL 论坛上有人建议使用日志记录并查询日志 这对我不起作用 因为我无法控制客户端代码库 你可
  • postgres 有 CLOSEST 运算符吗?

    我正在寻找这样的东西 给定一个表格 id number 1 7 2 1 25 3 1 01 4 3 0 查询SELECT FROM my table WHEREnumberCLOSEST 1 将返回第 3 行 我只关心数字 现在我有一个程序
  • 使用两个日期之间的随机日期时间更新每一行

    我有一个专栏叫date created我希望每一行保存一个随机日期 日期距当前时间为 2 天 我正在运行以下查询 但它会更新具有相同随机日期的所有行 我希望每一行都是随机的并且不相同 update table set date create
  • gitlab 上的权限被拒绝(公钥)

    我的问题是我无法从 GitLab 推送或获取 不过 我可以克隆 通过 HTTP 或通过 SSH 当我尝试推送时出现此错误 权限被拒绝 公钥 致命 无法从远程存储库读取 从我看过的所有线程中 这是我所做的 在我的计算机上设置 SSH 密钥并将
  • Google Cloud SQL - Postgresql 存储不断增长

    我最近开始修补 Google Cloud SQL PostgreSQL 我创建了一个空数据库 在 4 5 天的时间里 其存储使用量已增长到超过 20GB 它一直在上升 但数据库中没有数据 它甚至没有被使用 有谁知道会发生什么以及如何阻止它
  • 更改迁移中的自动​​增量值(PostgreSQL 和 SQLite3)

    我有一个托管在 Heroku 上的项目 想要更改表的自动增量起始值 我在本地使用 SQLite3 Heroku 使用 PostgreSQL 这是我在迁移中所拥有的 class CreateMytable lt ActiveRecord Mi
  • postgreSql 中特定时间后表更新

    我已经在 postgres 中创建了表 现在我想在特定时间 例如 1 小时 后更新一行 我看到很多问题 例如 https dba stackexchange com questions 56424 column auto updated a

随机推荐

  • c++函数指针

    1 声明函数指针 double cal int prototype double pf int 指针pf指向的函数 输入参数为int 返回值为double pf cal 指针赋值 2 指针作为函数的参数传递 void estimate in
  • Pytorch Tensor的索引与切片

    1 Pytorch风格的索引 根据Tensor的shape 从前往后索引 依次在每个维度上做索引 示例代码 import torch a torch rand 4 3 28 28 print a 0 shape 取到第一个维度 print
  • svg格式文件转换为png图片文件

    快要下班的时候 领导突然找我 发给我一个页面 说觉得这个页面的图标感觉不错 想把它做成图片放在项目里 我打开网页 用f12一看 用的是svg 这个我也不知道咋处理啊 但是遇到事情我们先不要慌 先在网上找找有没有解决办法 一顿搜索之下 我找到
  • 1. TensorRT量化的定义及意义

    前言 手写AI推出的全新TensorRT模型量化课程 链接 TensorRT下的模型量化 课程大纲如下 1 量化的定义及意义 1 1 什么是量化 定义 量化 Quantization 是指将高精度浮点数 如float32 表示为低精度整数
  • warning: dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing]

    下面的文章详细介绍了这个warning的来源和解决方法 也可以关闭优化 当然关闭优化并不是最终解决方法 down vote accepted First off let s examine why you get the aliasing
  • Linux 问题排查及性能调优

    总目录 一 问题场景 1 CPU问题 2 内存问题 3 iowait问题 二 性能优化简介 三 Linux 问题排查顺序 前言 监控大盘 第一步 平均负载 第二步 cpu核 第三步 内存 第四步 磁盘 第五步 带宽 第六步 具体应用 第七步
  • Redis知识整理一:基础知识

    什么是Redis Redis是一个开源的使用ANSI C语言编写 支持网络 可基于内存亦可持久化的日志型 Key Value数据库 并提供多种语言的API Redis缓存数据库特点 1 Redis支持数据的持久化 可以将内存中的数据保存在磁
  • 使用Yii查询CodeStriker

    公司使用的质量管理系统 评审活动 缺陷跟踪和文档库 中 需要与CodeStriker互动 开发如下类实现基本功能 View Code 1
  • adb shell 中直接激活界面命令

    adb root adb remount adb shell am start a android settings WIFI SETTINGS am activityManager a action n 包名 包名 activity ad
  • Selenium成长之路-03使用IDLE编写第一个自动化脚本

    windows用户 在电脑的开始菜单搜索IDLE 并启动ILDE python GUI 编译器 接下来我们就进入编译的环节了 1 导入webdriver包 from selenium import webdriver 2 初始化一个火狐浏览
  • mac支持的硬盘格式 什么硬盘格式是mac和win支持的

    大部分硬盘在默认出厂前都会设定好一个固定的磁盘格式 如果该格式与用户电脑所使用的系统不兼容 就无法正确地进行硬盘读写甚至硬盘识别 对于Mac系统和Windows系统而言 它们都有自己支持的某些硬盘格式 什么是Mac支持的硬盘格式 什么硬盘格
  • 如何关闭电脑防火墙

    开始 控制面板 WINDOWS防火墙 打开或关闭WINDOWS防火墙 关闭WINDOWS防火墙 不推荐 效果截图
  • C++ 中的变量定义

    变量定义就是告诉编译器在何处创建变量的存储 以及如何创建变量的存储 变量定义指定一个数据类型 并包含了该类型的一个或多个变量的列表 如下所示 type variable list 在这里 type 必须是一个有效的 C 数据类型 可以是 c
  • 有源医疗器械电磁兼容EMC的测试标准、测试项目以及测试方法

    目录 有源医疗器械电磁兼容的测试标准 测试项目以及测试方法 一 什么是电磁兼容 1 1电磁兼容概念 1 2电磁兼容三要素 1 3为什么要做电磁兼容 1 4电磁兼容测试项目 二 电磁兼容标准 2 1基础标准 2 2通用标准 2 3产品族标准
  • WPF 图表控件LiveCharts的应用——室内监控可视化

    需求 为了实现一个完整软件系统 必须具备一些基本的数据呈现控件 例如曲线图 柱状图 饼图等 本次的业务需求为 利用LiveCharts展示后台模拟的温度变化 像Winform里面 微软为我们提供了比较完整的Chart控件 但是在WPF组件中
  • C++知识讲解(一)

    目录 1 1 进入 C 1 1 1 main 函数 1 1 2 C 注释 1 1 3 C 预处理器和 iostream 文件 1 1 4 头文件名 1 1 5 名称空间 1 1 6 使用 cout 进行 C 输出 1 endl 控制符 2
  • [Python系列-22]:Python之人工智能 - 基本工具 - 6- 绘制二元函数的三维曲面图

    作者主页 文火冰糖的硅基工坊 https blog csdn net HiWangWenB 本文网址 https blog csdn net HiWangWenBing article details 119859493 目录 第1章 ma
  • 微信支付(weixin-java-pay)

    1 项目依赖 增加pom xml文件中增加依赖包 weixin java pay是GitHub开源的一个微信支付工具包
  • 14:00面试,14:08就出来了,问的问题有点变态

    从小厂出来 没想到在另一家公司又寄了 到这家公司开始上班 加班是每天必不可少的 看在钱给的比较多的份上 就不太计较了 没想到8月一纸通知 所有人不准加班 加班费不仅没有了 薪资还要降40 这下搞的饭都吃不起了 还在有个朋友内推我去了一家互联
  • pgsql备份工具:pg_rman在Linux下的安装、设置与使用

    pg rman是PostgreSQL的在线备份和恢复工具 pg rman项目的目标是提供一种像pg dump一样简单的在线备份和PITR方法 它就是pgsql实现全量备份和增量备份的最简易的工具 github地址 https github