物理备份工具 BRM vs gs_probackup

什么是BRM

上一篇文章讲了openGauss的物理备份工具gs_probackup,今天来说说BRM备份工具。
BRM备份恢复工具全称为:Backup and Recovery Manager,是MogDB基于opengauss的备份工具 gs_probackup 做了一些封装和优化,面向MogDB数据库实现备份和恢复运维管理工作。

BRM工具的优势

(1)企业级管理能力

  • 多实例统一管理
    BRM 可集中管理多个数据库实例的备份策略(如 brm_test1, brm_test2),而 gs_probackup 需手动为每个实例单独配置。
  • 可视化监控
    部分 BRM 实现提供 Web 界面或可视化报表,而 gs_probackup 仅支持命令行。

(2)自动化与策略增强

  • 智能备份保留策略
    BRM 支持更灵活的保留规则(如 --retention-redundancy 和 --retention-window),而 gs_probackup 需手动编写脚本清理旧备份。
  • 自动归档日志管理
    BRM 的 --backup-pg-log 可能集成自动 WAL 归档和清理,避免 gs_probackup 需手动配置 archive_command。

(3)高级功能封装

  • 一键恢复
    BRM 可能封装复杂的恢复流程(如自动合并增量备份、PITR),而 gs_probackup 需手动指定时间点或备份链。
  • 异构数据支持
    部分 BRM 支持同时备份数据库+外部文件(如 --external-dirs),而 gs_probackup 仅限数据库文件。

(4)性能优化

  • 并行备份/恢复
    商业版 BRM 可能优化底层引擎(如并行压缩/传输),速度优于 gs_probackup 的默认配置。
  • 增量备份增强
    BRM 的 --backup-mode=PTRACK 可能对 OpenGauss 的页面跟踪技术有更深优化。

BRM的使用

安装

上传到/home/omm/software/brm/
unzip brm_1.0.4_linux_arm64.zip
su - omm
mkdir /home/omm/.brm
cp /home/omm/software/brm/conf/brm.yaml /home/omm/.brm/

1)修改配置文件

指定备份文件存放路径和日志存放路径,存放路径需具有omm用户创建目录权限。

cat brm.yaml 
# 没有启用
backup_user: omm
# 备份文件存放目录
backup_home: /home/omm/brm
# 日志目录
log_file: /home/omm/log/brm/brm.log
# 日志级别
log_level: DEBUG
# 没有启用
lock_directory: /home/omm/log/run
# wal全局备份几次 default 1
wal_retention_redundancy: 1
# 是否允许主库进行备份. default:false
no_allow_primary_backup: false
network_limit_rate: 10m
# default on
enable_backup_wal_file_check: on
## 启动备份文件中心同步
#enable_backup_push: on
## 当前Brm节点名称,当enable_backup_center_push为on时此项为必填
#brm_node_name: 127.0.0.1:5434
## brm 备份文件集中存储配置
#backup_center:
#  - host: 127.0.0.1
#    port: 44332
#  - host: 127.0.0.1
#    port: 44333

2)工具验证

/home/omm/software/brm/brm version
time="2025-04-11 15:59:37.641886" level=info msg="Using config file:/home/omm/.brm/brm.yaml"
Release version: 0.0.12
Git Commit hash: 8bcf8b7
Git Tag        : v0.0.12
Build timestamp: 2021-11-15T05:00:20ZZ

3)创建备份服务

[omm@node1 archivelog]$ /home/omm/software/brm/brm add-server -i brm_test -D /opt/mogdb/data/ -d postgres -p 26000 -U omm --retention-redundancy 2 --retention-window 5 --archive-dir '/opt/mogdb/archivelog'/home/omm/software/brm/brm add-server \-i brm_test \                          # 实例名称-D /opt/mogdb/data/ \                  # 数据库数据目录-d postgres \                          # 默认连接数据库-p 26000 \                             # 数据库端口-U omm \                               # 数据库用户名--retention-redundancy 2 \             # 保留的备份冗余数--retention-window 5 \                 # 保留的备份天数--archive-dir '/opt/mogdb/archivelog'  # WAL归档日志目录

4)数据库全备

/home/omm/software/brm/brm backup -i brm_test -b FULL --backup-pg-log --delete-expired
/home/omm/software/brm/brm backup \-i brm_test \           # 指定备份实例名-b FULL \               # 备份类型:全量备份--backup-pg-log \       # 同时备份 PostgreSQL/MogDB 的 WAL 归档日志--delete-expired        # 自动清理过期的备份

5)增量备份

/home/omm/software/brm/brm backup -i brm_test --backup-mode=PTRACK 

查看备份实例

/home/omm/software/brm/brm show-backup -i brm_testbrm_test  9.2      SUJBTS  2025-04-11 11:46:42+08  PTRACK  STREAM    1/1    5s  259MB  16MB    1.00  3/2B000028  3/2B0001E8  OK      
brm_test  9.2      SUJB0H  2025-04-11 11:29:09+08  FULL    STREAM    1/0   11s  662MB  16MB    1.00  3/25000028  3/250001E8  OK  

6)全量恢复

/home/omm/software/brm/brm  restore -i brm_test -b SUJBTS -D /opt/mogdb/data

7)指定恢复

如果要恢复到增量备份之前的时间点

/home/omm/software/brm/brm  restore -i brm_test -b SUJB0H  -D /opt/mogdb/data

基于时间点恢复

/home/omm/software/brm/brm  restore -i brm_test  -D /opt/mogdb/data --recovery-target-time='2025-04-10 12:11:00'

基于 xid 恢复

/home/omm/software/brm/brm  restore -i brm_test  -D /opt/mogdb/data --recovery-target-xid=89757 -j 4

基于 lsn 恢复

/home/omm/software/brm/brm  restore -i brm_test  -D /opt/mogdb/data --recovery-target-lsn='0/550005E5'

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

问问lua怎么写DeepSeek,,,,,

很坦白说,这十年,我几乎没办法从互联网找到这个这样的代码,互联网引擎找不到,我也没有很大的“追求”要传承,或者要宣传什么;直到DeepSeek的出现 兄弟,Deepseek现在已经比你更了解你楼下的超市…

react+Tesseract.js实现前端拍照获取/选择文件等文字识别OCR

需求背景 在开发过程中可能会存在用户上传一张图片后下方需要自己识别出来文字数字等信息,有的时候会通过后端来识别后返回,但是也会存在纯前端去识别的情况,这个时候就需要使用到Tesseract.js这个库了 附Tesseract.js官方(htt…

蓝桥杯考前复盘

明天就是考试了,适当的停下刷题的步伐。 静静回望、思考、总结一下,我走过的步伐。 考试不是结束,他只是检测这一段时间学习成果的工具。 该继续走的路,还是要继续走的。 只是最近,我偶尔会感到迷惘,看…

前端-Vue3

1. Vue3简介 2020年9月18日,Vue.js发布版3.0版本,代号:One Piece(n 经历了:4800次提交、40个RFC、600次PR、300贡献者 官方发版地址:Release v3.0.0 One Piece vuejs/core 截止2023年10月,最…

[ctfshow web入门] web39

信息收集 题目发生了微妙的变化,只过滤flag,include后固定跟上了.php。且没有了echo $flag;,虽说本来就没什么用 if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){include($c.".php");} }else{…

【动手学深度学习】LeNet:卷积神经网络的开山之作

【动手学深度学习】LeNet:卷积神经网络的开山之作 1,LeNet卷积神经网络简介2,Fashion-MNIST图像分类数据集3,LeNet总体架构4,LeNet代码实现4.1,定义LeNet模型4.2,定义模型评估函数4.3&#xff0…

代码随想录第15天:(二叉树)

一、二叉搜索树的最小绝对差(Leetcode 530) 思路1 :中序遍历将二叉树转化为有序数组,然后暴力求解。 class Solution:def __init__(self):# 初始化一个空的列表,用于保存树的节点值self.vec []def traversal(self, r…

计算机操作系统-【死锁】

文章目录 一、什么是死锁?死锁产生的原因?死锁产生的必要条件?互斥条件请求并保持不可剥夺环路等待 二、处理死锁的基本方法死锁的预防摒弃请求和保持条件摒弃不可剥夺条件摒弃环路等待条件 死锁的避免银行家算法案例 提示:以下是…

vue拓扑图组件

vue拓扑图组件 介绍技术栈功能特性快速开始安装依赖开发调试构建部署 使用示例演示截图组件源码 介绍 一个基于 Vue3 的拓扑图组件,具有以下特点: 1.基于 vue-flow 实现,提供流畅的拓扑图展示体验 2.支持传入 JSON 对象自动生成拓扑结构 3.自…

go 通过汇编分析函数传参与返回值机制

文章目录 概要一、前置知识二、汇编分析2.1、示例2.2、汇编2.2.1、 寄存器传值的汇编2.2.2、 栈内存传值的汇编 三、拓展3.1 了解go中的Duff’s Device3.2 go tool compile3.2 call 0x46dc70 & call 0x46dfda 概要 在上一篇文章中,我们研究了go函数调用时的栈布…

python-1. 找单独的数

问题描述 在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。 要求: 设…

算法学习C++需注意的基本知识

文章目录 01_算法中C需注意的基本知识cmath头文件一些计算符ASCII码表数据类型长度运算符cout固定输出格式浮点数的比较max排序自定义类型字符的大小写转换与判断判断字符是数字还是字母 02_数据结构需要注意的内容1.stringgetline函数的使用string::findsubstr截取字符串strin…

从零开始写android 的智能指针

Android中定义了两种智能指针类型,一种是强指针sp(strong pointer),源码中的位置在system/core/include/utils/StrongPointer.h。另外一种是弱指针(weak pointer)。其实称之为强引用和弱引用更合适一些。强…

【leetcode hot 100 152】乘积最大子数组

错误解法:db[i]表示以i结尾的最大的非空连续,动态规划:dp[i] Math.max(nums[i], nums[i] * dp[i - 1]); class Solution {public int maxProduct(int[] nums) {int n nums.length;int[] dp new int[n]; // db[i]表示以i结尾的最大的非空连…

图论整理复习

回溯: 模板: void backtracking(参数) {if (终止条件) {存放结果;return;}for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) {处理节点;backtracking(路径,选择列表); // 递归回溯&#xff…

uniapp离线打包提示未添加videoplayer模块

uniapp中使用到video标签,但是离线打包放到安卓工程中,运行到真机中时提示如下: 解决方案: 1、把media-release.aar、weex_videoplayer-release.aar放到工程的libs目录下; 文档:https://nativesupport.dcloud.net.cn/…

打包构建替换App名称

方案适用背景 一套代码出多个安装包,且安装包的应用名称、图标都不一样考虑三语名称问题 通过 Gradle 脚本实现 gradle.properties 里面定义标识来区分应用,如下文里的 APP_TYPEAAA 、APP_TYPEBBB// 定义 groovy 替换方法 def replaceAppName(String …

DrissionPage移动端自动化:从H5到原生App的跨界测试

一、移动端自动化测试的挑战与机遇 移动端测试面临多维度挑战: 设备碎片化:Android/iOS版本、屏幕分辨率差异 混合应用架构:H5页面与原生组件的深度耦合 交互复杂性:多点触控、手势操作、传感器模拟 性能监控:内存…

达梦数据库用函数实现身份证合法校验

达梦数据库用函数实现身份证合法校验 拿走不谢~ CREATE OR REPLACE FUNCTION CHECK_IDCARD(A_SFZ IN VARCHAR2) RETURN VARCHAR2 IS TYPE WEIGHT_TAB IS VARRAY(17) OF NUMBER; TYPE CHECK_TAB IS VARRAY(11) OF CHAR; WEIGHT_FACTOR WEIGHT_TAB : WEIGHT_TAB(7,9,10,5,8,4,…

3dmax的python通过普通的摄像头动捕表情

1、安装python 进入cdm,打python要能显示版本号 >>>(进入python提示符模式) import sys sys.path显示python的安装路径, 进入到python.exe的路径 在python目录中安装(ctrlz退出python交互模式) 2、pip install mediapipe…