KingbaseES数据库物理备份还原sys_rman

2024-05-28 08:36

本文主要是介绍KingbaseES数据库物理备份还原sys_rman,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


数据库版本:KingbaseES V008R006C008B0014


        

简介

    sys_rman 是 KingbaseES 数据库中重要的物理备份还原工具,支持不同类型的全量备份、差异备份、增量备份,保证数据库在遇到故障时及时使用 sys_rman 来恢复到数据库先前状态。

        

文章目录如下

1. 备份前准备

1.1. 修改数据库配置

1.2. 备份配置说明

2. 非独立备份

2.1. 备份前准备

2.1.1. 配置备份参数

2.1.2. 初始化备份

2.2. 手动备份方法

2.2.1. 全量备份

2.2.2. 增量备份

2.2.3. 差异备份

2.3. 自动备份方法

2.3.1. 增加备份配置参数

2.3.2. 运行自动备份

2.3.3. 关闭自动备份

2.4. 管理备份

2.4.1. 查看备份列表

2.4.2. 按保留数清理备份

2.4.3. 按备份集名称清理

3. 非独立还原

3.1. 基于测试性质的还原

3.2. 基于最新备份的还原

3.3. 指定备份集还原

3.4. 指定事务ID还原

3.5. 指定时间点还原


        

1. 备份前准备

1.1. 修改数据库配置

保证数据库能够正常备份/还原,需要修改 data/kingbase.conf 以下几个参数后重启数据库生效

archive_mode = on    # 归档模式(on:表示在现有数据库节点上备份还原、always:表示在数据库节点外专门搭建一台用于备份的服务器)
archive_command = '/bin/cp -f %p /home/yt/archive/%f'  # 未注释就行,初始化时自动修改
wal_level = logical  # 决定多少信息写入wal中

重启数据库命令

sys_ctl -D data restart

        

1.2. 备份配置说明

根据不同情况修改备份配置 share/sys_backup.conf,说明如下:

# 备份的数据库模式:  single/cluster/single-pro
_target_db_style="cluster"
# 主节点IP
_one_db_ip="192.168.28.37"
# 存储备份物理文件的IP
_repo_ip="192.168.28.37"
# 集群标签(不用修改)
_stanza_name="kingbase"
# 连接数据库的操作系统用户名
_os_user_name="yt"
# 操作系统存放的备份目录(需要一个不存在的目录,自动创建)
_repo_path="/home/yt/kbbr_repo"# 保留备份数,超出后自动清理(例如配置未5,那么保留备份的文件达到第6份时自动清理1份)
_repo_retention_full_count=5
# 每隔几天执行1次全量备份
_crond_full_days=7
# 每隔几天执行1次差异备份
_crond_diff_days=0
# 每隔几天执行1次增量备份
_crond_incr_days=1
# 自动全量备份的备份时间(2表示凌晨2点执行)
_crond_full_hour=2
# 自动差异备份的备份时间(6表示早上6点执行)
_crond_diff_hour=6
# 自动增量备份的备份时间(17表示下午17点执行)
_crond_incr_hour=17
# 限制带宽(nMb/s),0表示不限制
_band_width=0
# 系统命令(不修改)
_os_ip_cmd="/sbin/ip"
_os_rm_cmd="/bin/rm"
_os_sed_cmd="/bin/sed"
_os_grep_cmd="/bin/grep"#################### 单机配置 ####################
# 数据库data目录
_single_data_dir="/home/kingbase/ES/single/data"
# 数据库bin目录
_single_bin_dir="/home/kingbase/ES/single/Server/bin"
# 数据库用户名
_single_db_user="system"
# 数据库端口号
_single_db_port="54321"# on表示sys_securecmd通信, off表示SSH通信
_use_scmd=on# 快速执行sys_start_backup(y、n)
_start_fast=y
# 备份文件类型(none、gz)
_compress_type=none
# 如果未归档的WAL文件,超过此设置显示ERROR并破坏backup-init(128MB ~ 1024MB)
_non_archived_space=1024#加密存储库的密码类型
#_repo_cipher_type="aes-256-cbc"# 加密/解密存储库文件的密码
#_repo_cipher_pass="c3k5ODQyLg=="# 禁用归档文件统计(n、y)
_archive_statistics=n

                

2. 非独立备份

  • 独立备份:指在数据库节点外单独使用一台用于备份的服务器(配置 archive_mode = always)
  • 非独立备份:指在现有数据库节点上进行备份还原(配置 archive_mode = on)

2.1. 备份前准备

2.1.1. 配置备份参数

 示例:单机配置需要修改的文件 share/sys_backup.conf

_target_db_style="single"
_repo_ip="备份IP"
_os_user_name="操作系统用户名"
_repo_path="备份目录"
_single_data_dir="数据库data目录"
_single_bin_dir="数据库bin目录"
_single_db_user="数据库用户名"
_single_db_port="数据库端口号"

        

2.1.2. 初始化备份

备份前需要初始化备份信息

sys_backup.sh init

系统提示 securecmdd 没有工作。这是因为我使用单机举例,没有启动 securecmdd 导致的错误。如果集群是基于 securecmdd 通信,那么备份就配置修改为 _use_scmd = on;如果是基于 ssh 通信,那么备份配置修改为 _use_scmd = off。

        

修改 share/sys_backup.conf 参数:

_use_scmd = off

初始化成功!

        

初始化完成后会自动修改数据库配置中 archive_command 参数:

并且会根据配置的备份目录生成一个文件夹(_repo_path=备份目录)。示例:

  • archive:归档WAL日志的目标目录
  • backup:保存各备份的目标目录
  • sys_rman.conf:运行时的配置文件(自动生成)

参考官网流程图(https://help.kingbase.com.cn/)

sys_rman 通过wal文件和数据文件来进行备份,但备份REPO与数据库实例处于同一个物理主机,冗余度较低。 

        

2.2. 手动备份方法

2.2.1. 全量备份

  • 全量备份是对所有数据文件进行一次备份,产生的备份集可以单独地构成还原的基础。

手动执行全量备份命令如下:

sys_rman--config=/kbbr_repo/sys_rman.conf  # 自动生成的配置文件--stanza=kingbase--archive-copy--type=full    # 类型为全量备份backup

        

备份完成后会在备份目录生成相对对应的备份目录(名称格式:日期-时间)

cd ./kbbr_repo/backup/kingbase

        

2.2.2. 增量备份

  • 增量备份是依赖于上一次全量备份及中间变化的备份,针对上一个备份有变化的数据文件进行一次备份,产生的备份集配合依赖的全量备份集及串行依赖备份集构成还原的基础。
  • 必须先执行全量备份才能操作增量备份。

增量备份又分为:

  • 文件粒度:当某个数据文件的一个数据块发生变化后,增量备份将拷贝整个数据文件
  • 块粒度:当某个数据文件的一个数据块发生变化后,块增量备份只拷贝变化的数据块

手动执行增量备份(文件粒度)命令如下:

sys_rman--config=/kbbr_repo/sys_rman.conf  # 自动生成的配置文件--stanza=kingbase--archive-copy--type=incr    # 类型为全量备份backup

        

 手动执行增量备份(块粒度)命令如下:

sys_rman--config=/kbbr_repo/sys_rman.conf  # 自动生成的配置文件--stanza=kingbase--archive-copy--type=page    # 类型为全量备份backup

        

2.2.3. 差异备份

  • 差异备份也是依赖于上一次全量备份,针对此全量备份有变化的数据文件进行一次备份,产生的备份集配合依赖的全量备份集构成还原的基础。
  • 必须先执行全量备份才能操作差异备份。

手动执行差异备份命令如下:

sys_rman--config=/kbbr_repo/sys_rman.conf  # 自动生成的配置文件--stanza=kingbase--archive-copy--type=diff    # 类型为全量备份backup

        

2.3. 自动备份方法

2.3.1. 增加备份配置参数

在目录《2.1.1》的基础上增加备份的自动时间 share/sys_backup.conf

# 保留备份数,超出后自动清理(例如配置未5,那么保留备份的文件达到第6份时自动清理1份)
_repo_retention_full_count=5# 每隔几天执行1次全量备份
_crond_full_days=3
# 每隔几天执行1次差异备份
_crond_diff_days=2
# 每隔几天执行1次增量备份
_crond_incr_days=1# 自动全量备份的备份时间(2表示凌晨2点执行)
_crond_full_hour=2
# 自动差异备份的备份时间(8表示早上8点执行)
_crond_diff_hour=8
# 自动增量备份的备份时间(17表示下午17点执行)
_crond_incr_hour=17

增加参数完成后不需要再次初始化,因为启动自动备份时间是读取 share/sys_backup.conf

        

2.3.2. 运行自动备份

初始化完成后直接运行

sys_backup.sh start

自动备份方法是基于系统的定时任务来实现,通过Linux命令 crontab -l 可以查看

启动自动备份后,通过命令反馈的日志信息可以得知,备份日志存放到:

  • log/sys_rman_backup_full.log
  • log/sys_rman_backup_diff.log
  • log/sys_rman_backup_incr.log

        

2.3.3. 关闭自动备份

关闭的方法也很简单,直接执行

sys_backup.sh stop

        

2.4. 管理备份

2.4.1. 查看备份列表

sys_rman--config=/kbbr_repo/sys_rman.conf  # 自动生成的备份配置--stanza=kingbaseinfo

头部说明 

  • full backup:全量备份信息
  • incr backup:增量备份信息
  • diff backup:差异备份信息

信息说明

  • timestamp start/stop:备份的开始/结束时间点
  • wal start/stop:备份开始/结束时的WAL日志文件
  • database size:数据库的运行时磁盘容量
  • database backup size:数据库的备份容量
  • backup set size:当前备份集的容量
  • backup size:当前备份集的实际磁盘容量,包含压缩因素和依赖备份集冗余

        

2.4.2. 按保留数清理备份

这种方法通常是在备份配置文件 share/sys_backup.conf 中的这个参数

_repo_retention_full_count=5  # 保留备份数量

初始化后会自动将参数配置到 kbbr_repo/sys_rman.conf 中,所以我们直接修改 kbbr_repo/sys_rman.conf 即可:例如只保留2份备份,那么修改为

_repo_retention_full_count=2

【示例】

1、先查看全量备份数

./bin/sys_rman --config=/home/yt/kbbr_repo/sys_rman.conf --stanza=kingbase info |grep 'full backup'

这里保留了4份

        

2、修改 kbbr_repo/sys_rman.conf

_repo_retention_full_count=2

        

3、手动清理

./bin/sys_rman --config=/home/yt/kbbr_repo/sys_rman.conf --stanza=kingbase expiresys_rman--config=/home/yt/kbbr_repo/sys_rman.conf--stanza=kingbaseexpire

        

4、查询剩余备份集

./bin/sys_rman --config=/home/yt/kbbr_repo/sys_rman.conf --stanza=kingbase info |grep 'full backup'

保留最新的2份

        

2.4.3. 按备份集名称清理

备份集名称就是查询备份列表时显示的名称:

sys_rman--config=/kbbr_repo/sys_rman.conf  # 自动生成的备份配置--stanza=kingbaseinfo

这里存在2份全量备份集,名称就是 full backup 后面的"20240526-060502F"

        

手动清理最后一份

sys_rman--config=/home/yt/kbbr_repo/sys_rman.conf--stanza=kingbaseexpire--set=20240422-194416F

注意:可以清理最新的备份集,但是不能全部清理,必须保留1个

        

3. 非独立还原

非独立还原对应前面的非独立备份,基于前面备份集来还原数据。

3.1. 基于测试性质的还原

  • 这种方式是指定新的 data 目录和临时禁止归档WAL文件
sys_rman--config=/home/yt/kbbr_repo/sys_rman.conf  # 配置文件绝对路径--stanza=kingbase--kb1-path=/home/yt/data_new # 还原的新data路径--archive-mode=off           # 临时禁制归档wal文件restore

还原后生成新的 data 目录,启动新 data 即可使用

        

3.2. 基于最新备份的还原

这种方法是将最新的备份集还原到数据库实例的 data 目录下(还原前需要关闭当前数据库实例),需要将原本 data 修改名称,还原自动生成 data 目录

sys_rman--config=/home/yt/kbbr_repo/sys_rman.conf  # 配置文件绝对路径--stanza=kingbaserestore

        

3.3. 指定备份集还原

如果不指定时间,工具将隐式地指定时间为备份集结束时间的后一秒

sys_rman --config=/home/yt/kbbr_repo/sys_rman.conf--stanza=kingbase--set='20200519-031336F'restore

指定时间,工具将验证指定时间是否晚于备份集结束时间

sys_rman--config=/home/yt/kbbr_repo/sys_rman.conf--stanza=kingbase--set='20200519-031336F'--type=time--target='2020-05-19 16:28:17'restore

        

3.4. 指定事务ID还原

sys_rman--config=/home/yt/kbbr_repo/sys_rman.conf--stanza=kingbase--type=xid--target='445566'--set='20210611-011416F_20210611-023050I'restore

使用指定的xid还原到特定状态,必须同时指定该xid之前的备份集,才能够恢复到该xid 

        

3.5. 指定时间点还原

sys_rman--config=/home/yt/kbbr_repo/sys_rman.conf--stanza=kingbase--type=time--target='2020-05-07 16:28:17'restore

这篇关于KingbaseES数据库物理备份还原sys_rman的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1010067

相关文章

数据库面试必备之MySQL中的乐观锁与悲观锁

《数据库面试必备之MySQL中的乐观锁与悲观锁》:本文主要介绍数据库面试必备之MySQL中乐观锁与悲观锁的相关资料,乐观锁适用于读多写少的场景,通过版本号检查避免冲突,而悲观锁适用于写多读少且对数... 目录一、引言二、乐观锁(一)原理(二)应用场景(三)示例代码三、悲观锁(一)原理(二)应用场景(三)示例

Node.js 数据库 CRUD 项目示例详解(完美解决方案)

《Node.js数据库CRUD项目示例详解(完美解决方案)》:本文主要介绍Node.js数据库CRUD项目示例详解(完美解决方案),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考... 目录项目结构1. 初始化项目2. 配置数据库连接 (config/db.js)3. 创建模型 (models/

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Ubuntu中远程连接Mysql数据库的详细图文教程

《Ubuntu中远程连接Mysql数据库的详细图文教程》Ubuntu是一个以桌面应用为主的Linux发行版操作系统,这篇文章主要为大家详细介绍了Ubuntu中远程连接Mysql数据库的详细图文教程,有... 目录1、版本2、检查有没有mysql2.1 查询是否安装了Mysql包2.2 查看Mysql版本2.

Oracle数据库常见字段类型大全以及超详细解析

《Oracle数据库常见字段类型大全以及超详细解析》在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,:本文主要介绍Oracle数据库常见字段类型大全以及超详细解析,文中通过... 目录前言一、字符类型(Character)1、CHAR:定长字符数据类型2、VARCHAR2:变长字符数

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot实现数据库读写分离的3种方法小结

《SpringBoot实现数据库读写分离的3种方法小结》为了提高系统的读写性能和可用性,读写分离是一种经典的数据库架构模式,在SpringBoot应用中,有多种方式可以实现数据库读写分离,本文将介绍三... 目录一、数据库读写分离概述二、方案一:基于AbstractRoutingDataSource实现动态

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

mysql数据库重置表主键id的实现

《mysql数据库重置表主键id的实现》在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,本文主要介绍了mysql数据库重置表主键id的实现,具有一定的参考价值,感兴趣的可以了... 目录关键语法演示案例在我们的开发过程中,难免在做测试的时候会生成一些杂乱无章的SQL主键数据,当我们

Spring Boot 整合 MyBatis 连接数据库及常见问题

《SpringBoot整合MyBatis连接数据库及常见问题》MyBatis是一个优秀的持久层框架,支持定制化SQL、存储过程以及高级映射,下面详细介绍如何在SpringBoot项目中整合My... 目录一、基本配置1. 添加依赖2. 配置数据库连接二、项目结构三、核心组件实现(示例)1. 实体类2. Ma