【openGauss】物理备份恢复
文章目录
- 1. gs_backup
- (1)备份
- (2)恢复
- (3)手动恢复的办法
- 2. gs_basebackup
- (1)备份
- (2)恢复
- ① 伪造数据目录丢失
- ② 恢复
- 3. gs_probackup
- (1)开启增量功能
- (2)初始化备份存储路径
- (3)添加备份实例
- (4)添加备份配置
- (5)执行全量备份
- (6)增量备份
- (7)合并备份
- (8)备份恢复
数据库物理备份是指直接备份数据库的物理文件,包括数据文件、日志文件、控制文件等,而不是通过逻辑方式(如SQL语句)导出数据。物理备份是对数据库底层文件的完整复制,通常用于快速恢复数据库到某个时间点的状态。
物理备份的特点
- 备份速度快:物理备份直接复制文件,通常比逻辑备份(如导出SQL语句)更快。
- 恢复速度快:恢复时直接替换文件,不需要重新执行SQL语句。
- 完整性高:备份的是数据库的完整状态,包括数据文件、日志文件等,适合大规模数据恢复。
1. gs_backup
openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_backup工具帮助openGauss备份、恢复重要数据,主要目的是避免某个节点出现二进制文件(工具脚本)、配置文件丢失。
语法结构:
gs_backup -t 执行方式(备份/恢复) --backup-dir=备份/恢复目录 --parameter
前提条件
- 可以正常连接openGauss数据库。
- 在进行还原时,需要保证各节点备份目录中存在备份文件。
- 需以操作系统用户omm执行gs_backup命令。
(1)备份
① 备份参数文件,可以指定–parameter或者不指定,不指定的情况下默认就是备份参数文件
gs_backup -t backup --backup-dir=/home/omm/backup --parameter
# -t:指定备份或恢复
# --backup-dir:备份/恢复文件所存放路径(最后一级目录可不存在,如果不存在系统自动创建)
# -h:备份的节点,如果不指定就备份整个集群所有节点
# -- parameter(默认):备份postgresql.conf,pg_hba.conf文件
# -- binary:备份工具脚本
# -- all:备份postgresql.conf,pg_hba.conf和工具脚本文件

查看备份得到的参数文件,因为没有指定-h,系统默认备份整个集群所有节点,所以加压压缩包后会得到又一层压缩包文件,每个压缩包为一个节点的,比如当前节点为node1,将parameter.tar加压后会得到一个parameter_node1.tar文件
cd /home/omm/backup
tar xvf parameter.tar
# 查看解压后得到的新压缩文件名称
ls
# 解压指定节点的压缩包
tar xvf parameter_hostname.tar

② 备份二进制文件(备份app目录下的工具文件)
gs_backup -t backup --backup-dir=/home/omm/backup --binary

跟备份参数文件一样的,会得到一个集群二进制文件的压缩包,binary.tar,解压后得到各个节点的二进制文件压缩包binary_hostname.tar
cd /home/omm/backup
tar xvf binary.tar
# 查看解压后得到的新压缩文件名称
ls
# 解压指定节点的压缩包
tar xvf binary_hostname.tar

查看备份的二进制文件信息
# 此实验中app名称为app_b035fd
ls app_33b035fd/bin

③ 当指定备份all时,相当于同时指定–parameter和–binary
# 为了更清晰的了解备份内容,将前面两个操作备份和解压文件全部移除(文件存在会自动覆盖,这里是为了明确了解不同参数备份的文件内容)
rm -rf /home/omm/backup/*
# 执行备份
gs_backup -t backup --backup-dir=/home/omm/backup --all

(2)恢复
当数据库出现参数文件、二进制文件丢失时,可以基于之前备份的文件进行恢复
gs_backup -t restore --backup-dir=/home/omm/backup --all
# -h 备份的节点,如果不指定就备份整个集群所有节点
# -- parameter(默认):备份postgresql.conf,pg_hba.conf文件
# -- binary:备份工具脚本
# -- all:备份postgresql.conf,pg_hba.conf和工具脚本文件
# -- force:强制restore,仅限于--all或--binary时才生效

(3)手动恢复的办法
-
pg_hba.conf可以手动从正常节点上复制,然后修改客户端认证策略
-
postgresql.conf可以通过调用gs_om重写生成(需要借助xml文件)
-
二进制文件可以手动从正常节点上复制
2. gs_basebackup
openGauss部署成功后,在数据库运行的过程中,会遇到各种问题及异常状态。openGauss提供了gs_basebackup工具做基础的物理备份。gs_basebackup的实现目标是对服务器数据库文件的二进制进行拷贝。
远程执行gs_basebackup时,需要使用系统管理员账户。
gs_basebackup当前支持热备份模式和压缩格式备份模式。
gs_basebackup目前仅支持全量备份,恢复需要手动恢复
语法结构:
gs_basebackup -D 备份路径(目录) -p port
# -D:备份文件存放路径,路径必须存在,且必须为空
如果备份目录不存在会报如下异常:

如果备份目录不为空会报如下异常:

(1)备份
gs_basebackup -D /home/omm/backup/basebackup -p 15400
# 如果环境变量中配置过端口,可以不指定-p

当数据库中存在绝对路径的表空间时,需要手动为对应表空间配置映射路径
伪造异常场景(存在绝对路径表空间)
gsql -p 15400 -d postgres -r
在数据库中创建表空间
# 创建表空间
create tablespace tbs1 location '/home/omm/tbs1';
# 创建表
create table t1(c1 int) tablespace tbs1;
# 给t1表添加数据
insert into t1 values(1);

退出数据库连接(\q)再重新执行备份
# 清空备份路径,否则会出现异常
rm -rf /home/omm/backup/basebackup/*
# 执行备份
gs_basebackup -D /home/omm/backup/basebackup -p 15400

根据异常信息可以看到因为/home/omm/tbs1目录不为空导致备份异常,就是某个绝对路径表空间没有指定空的映射路径(空的)导致的
gs_basebackup -D /home/omm/backup/basebackup -p 15400 -T /home/omm/tbs1=/home/omm/backup/basebackup/tbs1
# -T old_dir=new_dir:为旧路径指定映射新路径
# 当数据目录异常,目录权限异常无法恢复,数据目录不存在
# 手动造成数据目录异常的场景,mv 将数据目录名称修改为其他名称,rm把数据目录删除

(2)恢复
① 伪造数据目录丢失
使用gs_om -t status --detail查询数据目录名称
gs_om -t status --detail

删除原数据目录
# 删除目录
rm -rf /opt/huawei/install/data/dn
# 重新查看集群状态
gs_om -t status --detail

重新启动数据库也无法正常启动

② 恢复
将备份的目录复制到数据目录下,名称依旧还是原数据目录名称(无法确定名称用上面介绍的方式查看),设置过映射的表空间当前所使用路径为备份时指定的目录,所以只需要恢复数据目录即可,且表空间原目录可以不维护

# 将备份目录复制到/opt/huawei/install/data目录下,并命名为dn
cp -r /home/omm/backup/basebackup /opt/huawei/install/data/dn
# 启动数据库
gs_om -t start
# 查看数据库状态
gs_om -t query

备份流程
- 创建备份目录,确保目录存在且为空
- 调用工具,执行备份
- 如果有绝对路径的表空间,需要配置映射路径
恢复流程
- 使用gs_om查看原数据目录的路径
- 将备份目录整体复制到数据路径的路径,并且目录名称与原数据目录保持一致
- 如果绝对路径的表空间数据也丢失,将备份指定的目录复制回原目录
3. gs_probackup
gs_probackup是一个用于管理openGauss数据库备份和恢复的工具。它对openGauss实例进行定期备份,以便在数据库出现故障时能够恢复服务器。
- 可用于备份单机数据库,也可对主机或者主节点数据库备机进行备份,为物理备份。
- 可备份外部目录的内容,如脚本文件、配置文件、日志文件、dump文件等。
- 支持全量备份、增量备份、定期备份和远程备份。
- 可设置备份的留存策略。
(1)开启增量功能
登录到数据库
gsql -p 15400 -d postgres -r
查询pg_settings视图,确定当前cbm参数是开启还是关闭,默认是关闭状态
select * from pg_settings where name like '%cbm%';

退出数据库连接,使用gs_guc修改参数为on
gs_guc reload -N all -I all -c "enable_cbm_tracking=on";

(2)初始化备份存储路径
gs_probackup init -B /home/omm/backup/probackup
# -B:指定备份目录,最后一级目录可以不存在,系统会自动创建

(3)添加备份实例
查询待备份实例数据目录
gs_om -t status --detail

添加备份实例
gs_probackup add-instance --instance dn1 -B /home/omm/backup/probackup/ -D /opt/huawei/install/data/dn/
# --instance: 实例名称(自定义)
# -B:备份路径
# -D:备份实例的数据目录

(4)添加备份配置
gs_probackup set-config --instance=dn1 -B /home/omm/backup/probackup/ -d postgres -p 15400
# -d:数据库名称
# -p:数据库端口

(5)执行全量备份
gs_probackup backup --instance=dn1 -B /home/omm/backup/probackup/ -b full
# -b:备份方式,full为全量,ptrack为增量

查看备份数据
gs_probackup show -B /home/omm/backup/probackup/

(6)增量备份
登录数据库伪造数据变动的场景(目的是为了后面的增量备份操作)
gsql -p 15400 -d postgres -r
创建一张新表并添加数据
create table t2(c1 int);
insert into t2 values(1),(2);

退出数据库连接(\q),执行增量备份
gs_probackup backup --instance=dn1 -B /home/omm/backup/probackup/ -b ptrack

查看备份数据
gs_probackup show -B /home/omm/backup/probackup/

(7)合并备份
将增量和全量合并为一个完整全量备份
gs_probackup merge --instance=dn1 -B /home/omm/backup/probackup/ -i ST1V18
# -i:增量备份ID,因为增量备份是依赖全量的,所以指定增量ID后系统会自动匹配该增量依赖的全量是谁

查看备份数据
gs_probackup show -B /home/omm/backup/probackup/

(8)备份恢复
校验待恢复的文件是否存在且未损坏
gs_probackup validate -B /home/omm/backup/probackup/

也可以指定校验具体的实例和备份
gs_probackup validate -B /home/omm/backup/probackup/ --instance dn1 -i ST1V18

使用restore子命令前,应先停止gaussdb进程
gs_om -t stop

使用备份恢复数据,当数据库中存在设置了绝对路径的表空间时,恢复时需要为该目录重新指定映射一个新的空目录,否则就会出现如下异常

3331861)
-T参数和–external-mapping参数需要同时使用
gs_probackup restore --instance dn1 -B /home/omm/backup/probackup/ -i ST1V18 -D /opt/huawei/install/data/dn_bak -T /home/omm/backup/basebackup/tbs1=/home/omm/pg_tbs/tbs1 --external-mapping=/home/omm/backup/basebackup/tbs1=/home/omm/pg_tbs/tbs1# -i:指定恢复到哪次备份,如果没有指定-i就恢复到最近一次备份
# -D:指定恢复到哪个数据目录,如果不指定就是集群中记录的默认数据目录,恢复的目录需要是空的
# -T OLDDIR=NEWDIR:为绝对路径的表空间指定路径映射,一个-T指定一个表空间,此选项必须和--external-mapping一起使用
# --external-mapping=OLDDIR=NEWDIR:在恢复时,将包含在备份中的外部目录从_OLDDIR_重新定位到_NEWDIR_目录
但是备份时未指定备份数据目录外目录,所以指定恢复时会报错
在这里插入图片描述
如果存在外部目录(一般是表空间),备份时使用-E指定外部目录映射
# 备份需要是数据库启动状态
gs_om -t start
# 执行备份
gs_probackup backup --instance=dn1 -B /home/omm/backup/probackup/ -b full -E /home/omm/backup/basebackup/tbs1:/home/omm/pg_tbs/tbs1
# -E old_dir:new_dir 指定目录映射

基于该备份恢复,在备份时打印内容中是包含了本次备份ID的,也可以使用show查看

恢复
gs_probackup restore --instance dn1 -B /home/omm/backup/probackup/ -i ST1YER -D /opt/huawei/install/data/dn_bak -T /home/omm/backup/basebackup/tbs1=/home/omm/pg_tbs/tbs1 --external-mapping=/home/omm/backup/basebackup/tbs1=/home/omm/pg_tbs/tbs1

相关文章:
【openGauss】物理备份恢复
文章目录 1. gs_backup(1)备份(2)恢复(3)手动恢复的办法 2. gs_basebackup(1)备份(2)恢复① 伪造数据目录丢失② 恢复 3. gs_probackup(1…...
蓝桥杯备赛-基础练习 day1
1、闰年判断 问题描述 给定一个年份,判断这一年是不是闰年。 当以下情况之一满足时,这一年是闰年:1.年份是4的倍数而不是100的倍数 2.年份是400的倍数。 其他的年份都不是闰年。 输入格式 输入包含一个…...
实验四 Python聚类决策树训练与预测 基于神经网络的MNIST手写体识别
一、实验目的 Python聚类决策树训练与预测: 1、掌握决策树的基本原理并理解监督学习的基本思想。 2、掌握Python实现决策树的方法。 基于神经网络的MNIST手写体识别: 1、学习导入和使用Tensorflow。 2、理解学习神经网络的基本原理。 3、学习使用…...
【原创】在高性能服务器上,使用受限用户运行Nginx,充当反向代理服务器[未完待续]
起因 在公共高性能服务器上运行OllamaDeepSeek,如果按照默认配置启动Ollama程序,则自己在远程无法连接你启动的Ollama服务。 如果修改配置,则会遇到你的Ollama被他人完全控制的安全风险。 不过,我们可以使用一个方向代理&#…...
网络_面试_HTTP请求报文和HTTP响应报文
简介: HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。 HTTP请求报文 一个HTTP请求报文由请求行(request line)、请求头部&…...
详解CPU的组成与功能
CPU的组成与功能 一、 控制单元(Control Unit, CU)二、 算术逻辑单元(Arithmetic Logic Unit, ALU)三、 寄存器(Registers)四、 高速缓存(Cache)五、 辅助结构与技术译码器ÿ…...
Spring boot3-WebClient远程调用非阻塞、响应式HTTP客户端
来吧,会用就行具体理论不讨论 1、首先pom.xml引入webflux依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId> </dependency> 别问为什么因为是响应式....…...
18 | 实现简洁架构的 Handler 层
提示: 所有体系课见专栏:Go 项目开发极速入门实战课;欢迎加入 云原生 AI 实战 星球,12 高质量体系课、20 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra);本节课最终…...
《Transformer如何进行图像分类:从新手到入门》
引言 如果你对人工智能(AI)或深度学习(Deep Learning)感兴趣,可能听说过“Transformer”这个词。它最初在自然语言处理(NLP)领域大放异彩,比如在翻译、聊天机器人和文本生成中表现出…...
coding ability 展开第三幕(滑动指针——基础篇)超详细!!!!
文章目录 前言滑动窗口长度最小的子数组思路 无重复字符的最长子串思路 最大连续1的个数思路 将x减到0的最小操作数思路 总结 前言 前面我们已经把双指针的一些习题练习的差不多啦 今天我们来学习新的算法知识——滑动窗口 让我们一起来探索滑动窗口的魅力吧 滑动窗口 滑动窗口…...
RAGFlow版本升级-Win10系统Docker
下载源码压缩包 https://github.com/infiniflow/ragflow.git 删除旧版本代码文件夹,把下载的代码解压到原先目录 更新一下env文件:ragflow/docker/.env 把值改为最新版本即可 RAGFLOW_IMAGEinfiniflow/ragflow:v0.17.1 更新一下docker docker compose -…...
通过mybatis的拦截器对SQL进行打标
1、背景 在我们开发的过程中,一般需要编写各种SQL语句,万一生产环境出现了慢查询,那么我们如何快速定位到底是程序中的那个SQL出现的问题呢? 2、解决方案 如果我们的数据访问层使用的是mybatis的话,那么我们可以通过…...
如何自己做奶茶,从此告别奶茶店
自制大白兔奶茶,奶香与茶香激情碰撞,每一口都是香浓与甜蜜的双重诱惑,好喝到跺脚!丝滑口感在舌尖舞动,仿佛味蕾在开派对。 简单几步就能复刻,成本超低,轻松在家享受奶茶自由。 材料:大白兔奶糖&…...
JavaScript性能优化实战指南
JavaScript性能优化实战指南 1. 性能分析工具与指标 核心工具链 Chrome DevTools: Performance面板:记录运行时性能,分析长任务(Long Tasks)、强制回流(Layout Shifts)、函数调用堆栈。Memory面…...
宇树人形机器人开源模型
1. 下载源码 https://github.com/unitreerobotics/unitree_ros.git2. 启动Gazebo roslaunch h1_description gazebo.launch3. 仿真效果 H1 GO2 B2 Laikago Z1 4. VMware: vmw_ioctl_command error Invalid argument 这个错误通常出现在虚拟机环境中运行需要OpenGL支持的应用…...
【Linux】浅谈冯诺依曼和进程
一、冯诺依曼体系结构 冯诺依曼由 输入设备、输出设备、运算器、控制器、存储器 五部分组成。 冯诺依曼的设计特点 二进制表示 所有数据(包括程序指令)均以二进制形式存储和运算,简化了硬件逻辑设计,提高了可靠性。 存储程序原理…...
env.development.local 和 env.development 的区别
env.development.local 和 env.development 的区别 区别1、场景2、git管理3、加载策略 思考原因如下 区别 1、场景 env.development: 用于开发环境的环境变量配置env.development.local: 用于存储特定于开发者的本地配置信息 2、git管理 env.development.local 会通过*.loca…...
linux操作系统实战
第一题 创建根目录结构中的所有的普通文件 [rootlocalhost ~]# cd /[rootlocalhost /]# mkdir /text[rootlocalhost /]# cd /text[rootlocalhost text]# mkdir /text/boot /text/root /text/home /text/bin /text/sbin /text/lib /text/lib64 /text/usr /text/opt /text/etc /…...
Python Cookbook-4.1 对象拷贝
任务 想拷贝某对象。不过,当你对一个对象赋值,将其作为参数传递,或者作为结果返回时,Python 通常会使用指向原对象的引用,并不是真正的拷贝。 解决方案 Python 标准库的 copy 模块提供了两个函数来创建拷贝。第一个…...
浅谈时钟启动和Systemlnit函数
时钟是STM32的关键,是整个系统的心脏,时钟如何启动,时钟源如何选择,各个参数如何设置,我们从源码来简单分析一下时钟的启动函数Systemlnit()。 Systemlnit函数简介 我们先来看一下源程序的注释…...
事业单位ABCDE类
1 我刚刚查阅了一下安徽省市直单位报名的表,我这个专业报的岗位大多数是自然科学专技岗。 2 安徽省的岗位大多都限制计算机科学与技术,我这个0854计算机技术能报的岗位十分有限。 而且我没有看到一个岗位只招应届生,显然安徽不保护应届生的…...
Python:函数(一)
python函数相关的知识点 1. 函数定义与调用 定义:使用 def 关键字,后接函数名和参数列表。 def greet(name):"""打印问候语(文档字符串)"""print(f"Hello, {name}!") 调用:…...
MySql学习_基础Sql语句
目录 1.数据库相关概念 2.SQL 2.1 SQL通用语法 2.2 SQL分类 2.3 DDL(数据库定义语言) 2.4 DML(数据操作语言) 2.5 DQL(数据查询语言) 2.6 DCL(数据控制语言) 3. 函数 3.1 字…...
Nginx 生产环境安全配置加固
以下是Nginx生产环境安全配置加固的综合方案,结合多个技术实践和行业标准整理: 一、基础安全防护 1. 隐藏版本信息 在http或server块添加server_tokens off;,避免暴露Nginx版本号。使用headers-more-nginx-module模块彻底移除响应头…...
C#中继承的核心定义
1. 继承的核心定义 继承 是面向对象编程(OOP)的核心特性之一,允许一个类(称为子类/派生类)基于另一个类(称为父类/基类)构建,自动获得父类的成员(字段、属…...
小白学Agent技术[5](Agent框架)
文章目录 Agent框架Single Agent框架BabyAGIAutoGPTHuggingGPTHuggingGPT工作原理说明GPT-EngineerAppAgentOS-Copilot Multi-Agent框架斯坦福虚拟小镇TaskWeaverMetaGPT微软UFOAgentScope现状 常见Agent项目比较概述技术规格和能力实际应用案例开发体验比较ChatChain模式 Agen…...
21.dirsearch:Web 路径扫描工具
一、项目介绍 dirsearch 是一款高效、多线程的 Web 路径扫描工具,专为渗透测试人员和网络安全研究人员设计,用于发现目标网站的隐藏目录、敏感文件及未授权接口。其支持自定义字典、代理配置、请求头伪装等功能,适用于红队渗透、漏洞挖掘及资…...
VSTO(C#)Excel开发4:打印设置
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
设计模式Python版 模板方法模式(上)
文章目录 前言一、模板方法模式二、模板方法模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间…...
源IP泄露后如何涅槃重生?高可用架构与自动化防御体系设计
一、架构层解决方案 1. 高防代理架构设计 推荐架构: 用户 → CDN(缓存静态资源) → 高防IP(流量清洗) → 源站集群(真实IP隐藏) ↑ Web应用防火墙(WAF) 实施要点&a…...
