暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

【金仓数据库征文】_金仓 KES 物理备份与恢复实战指南:sys_rman 高效应用解析

原创 jiayou 2025-06-10
671

金仓 KES 物理备份与恢复实战指南:sys_rman 高效应用解析

一、概要

对于硬件故障、误操作和恶意破坏等无法自动恢复的场景,KES 提供的备份还原方式可以分为两种: 一种是基于日志的物理备份还原,另一种是基于 SQL 语句的逻辑备份还原。这两种方式技术原理不一样,各有特点,适用于不同的场合。

物理备份还原指的是通过备份集和归档日志将数据库转化为历史状态的过程,KES通过备份磁盘中数据目录下的物理文件(数据文件、控制文件和日志文件),依靠还原数据文件和日志恢复技术来保护数据。目前只支持数据库实例整体备份,不支持单个数据库或数据表备份。KES 集群的备份恢复功能从逻辑上看,针对的是整个集群,而不是某个节点。

KES  最常用的物理备份工具是 sys_rman 。sys_rman  支持全量备份、差异备份、增量备份等备份类型,支持完全恢复、不完全恢复等恢复类型。

本文将通过搭建KES V9 版本环境演示 sys_rman 工具的使用。

二、sys_rman 工具介绍

本次介绍物理备份工具(sys_rman)的使用方法。包括备份初始化配置、备份、还原、恢复、备份集管理等。

  • 工具sys_rman属于物理备份还原
  • 工具备份的对象,既可以是数据库单机实例,也可以是数据库集群
  • 工具初始配置时、备份时,数据库服务必须处于运行状态、读写功能正常、集群各节点在线
  • 工具的初始配置、备份,必须在REPO仓库节点上执行
  • 工具的还原,必须在DB数据库节点上执行

1、sys_rman 工具的构成

工具不需要额外安装,由KingbaseES安装包统一部署。所包含的可执行程序和配置文件及其功能说明如下:

文件名

用途及路径

说明

sys_rman

二进制可执行文件,执行备份还原的核心文件; 位于安装目录的./bin目录下

此命令可以在数据库节点和备份服务器 上执行,读取sys_rman.conf配置信息

sys_backup.sh

脚本文件,用于协助管理员完成初始配置; 位于安装目录的./bin目录下

只能在REPO节点上执行,执行初始化自动生成sys_rman.conf文件

sys_backup.conf

初始化脚本对应的配置文件; 模板位于安装目录./kingbase/share下。

执行sys_backup.sh时需要 读取该文件的配置信息

sys_rman.conf

运行时配置文件,将由初始化配置自动生成

自动生成运行时配置文件, 不建议人为修改

2、sys_rman 工具使用约定

一般通用约束:

  • 工具至多支持8个DB节点的集群。
  • 启动数据库实例时,应该使用绝对路径来指定data目录。
  • 跨机备份场景,需保证sys_rman二进制文件在数据库节点和备份节点的目录结构保持一致(包括软连接、绝对路径)。
  • 如果操作系统是麒麟Kylin系统,需要以root用户执行: echo 非ROOT用户名 >> /etc/cron.allow #默认是kingbase。
  • 如果操作系统是UOS或者Deepin,需要在系统配置文件 /etc/profile 末尾增加一行。export OPENSSL_CONF=/etc/ssl/。
  • 集群中witness节点不用备份,无需配置witness ip至备份配置文件中。
  • 集群中的每个DB数据库节点、REPO备份服务器,都将创建REPO_PATH,如果已有此目录或权限问题,将报错退出。
  • 集群中所有节点必须做时钟同步,系统时间需保持一致(要求至少误差范围在2s以内)。
  • 工具不支持UNLOGGED TABLE的数据内容的备份和还原。
  • 在单机或集群的外部备份场景下,不同节点之间需要远程访问,V008R006C005B0023之后的版本,支持securecmdd或sshd;之前的版本支持sshd。
  • 使用securecmdd功能时,管理员需要在每个DB节点和REPO节点启动securecmdd相关服务。启动方式参考《 金仓数据守护集群和读写分离集群使用手册 》 远程通信工具。
  • 使用sshd功能时,集群数据节点和REPO节点,root用户和数据库用户应该是ssh配置交叉免密登录,工具只支持默认的 TCP 22 端口。
  • 块增量备份功能,使用的前提条件是启用ktrack插件,生效后做一次全量备份或增量备份或差异备份,参考《 KingbaseES插件参考手册 》 ktrack 。
  • 工具的操作日志,默认情况下,位于/log/目录中,以 -<sys_rman comand>.log 为命名格式,如:kingbase-backup.log、kingbase-restore.log等。
  • 工具backup、check、stanza-create等操作时需连接数据库,默认为test库,该库于initdb时创建因而无需额外操作;如test库不存在,执行sys_rman 相关操作时需使用 --kb1-database 指定一个存在的数据库,例如: --kb1-database=test1 。

REPO节点约束:

  • 至多支持同时配置8个REPO节点;
  • 多个REPO节点之间需要ssh免密或scmd服务;
  • 物理备份初始化之后,不支持增加或移除REPO节点。若需要修改repo节点IP,请重新配置sys_backup.conf文件并新执行初始化操作;
  • 存在多个REPO时,任一REPO的archvie-push成功,则反馈给kingbase成功,继续推送下一个WAL文件;
  • 物理备份多REPO仅支持single模式和cluster备份模式,暂不支持single-pro模式;
  • 若集群DB节点作为一个REPO节点,该节点只能是主节点,且只能位于REPO IP列表首位,备节点不能作为REPO节点使用;
  • 只需要在一个REPO上执行一次初始化,多个REPO同时配置完成;
  • 多REPO IP列表的第一个IP,必须是执行初始化的节点;
  • sys_rman backup和sys_rman restore一次只能使用一个REPO,默认情况使用第一个REPO,其他REPO需要命令行指定(如--repo=2);
  • sys_rman backup只能在REPO节点执行,在每个REPO节点分别执行;
  • 第一个REPO在集群主节点上时,主备切换后此REPO将失去执行备份的能力,其余REPO备份功能正常。

3、sys_rman 工具的初始化配置

初始化配置需要经过如下四个步骤:

准备初始配置文件执行初始化操作备份任务的启停配置文件信息变化处理

1. 准备初始配置文件

sys_rman初始化优先使用bin/sys_backup.conf配置文件,若bin目录下不存在则默认使用share/sys_backup.conf文件。按照之前收集好的备份部署信息,修改配置sys_backup.conf文件。

  • sys_backup.conf,初始化配置文件,供修改的配置文件
  • sys_rman.conf,运行时配置文件,由初始化动作自动生成,不推荐人为后续的修改

KingbaseES的安装目录 ./kingbase/share 目录下有初始配置文件的模板,包含以下参数:

参数名

参数说明

默认值

_target_db_style

选择性选项,可选single或cluster或single-pro。 single对应单机模式的目标数据库实例,cluster对应集群模式的目标数据库实例,single-pro对应集群模式的每个DB节点独立备份

"cluster”

_one_db_ip

一个数据库节点的IP或主机名,支持主机名、IPv4、IPv6地址

"192.168.28.37"

_repo_ip

REPO备份节点的IP或主机名,支持主机名、IPv4、IPv6地址

"192.168.28.37"

_stanza_name

备份服务器的标签,仅在物理备份范畴内使用

"kingbase"

_os_user_name

操作系统的用户名

"jiqun"

_repo_path

实际保存备份集的目录

"/home/jiqun/kbbr_repo”

_repo_retention_full_count

保存全量备份的数目,超过此数目的全量备份将被自动移除

9

_crond_full_days

自动执行全量备份的间隔天数,0表示不执行

7

_crond_diff_days

自动执行差异备份的间隔天数,0表示不执行

0

_crond_incr_days

自动执行增量备份的间隔天数,0表示不执行

1

_crond_full_hour

自动执行全量备份的时间点,2表示凌晨2点

2

_crond_diff_hour

自动执行差异备份的时间点,3表示凌晨3点

3

_crond_incr_hour

自动执行增量备份的时间点,4表示凌晨4点

4

_band_width

网络限速,单位固定为 MB/s, 默认为0,代表不限速,配置文件仅接受纯数字

0

_os_ip_cmd

操作系统常见命令ip的全路径文件名

"/sbin/ip"

_os_rm_cmd

操作系统常见命令rm的全路径文件名

"/bin/rm"

_os_sed_cmd

操作系统常见命令sed的全路径文件名

"/usr/bin/sed"

_os_grep_cmd

操作系统常见命令grep的全路径文件名

"/bin/grep"

_single_data_dir

单机数据库节点的数据目录

"/home/kingbase/ES/single/data"

_single_bin_dir

单机数据库节点的二进制目录

"/home/kingbase/ES/single/Server/bin"

_single_db_user

单机数据库节点的数据库登录用户名

"system"

_single_db_port

单机数据库节点的端口

"54321"

_use_scmd

使用通讯协议,默认使用securecmdd,可选使用ssh

on

_start_fast

是否快速启动备份,立即生成checkpoint,默认y

y

_compress_type

是否在备份时使用压缩存储,默认为none不压缩

none

_non_archived_space

在init过程中,检查未归档的WAL的容量,如果超过设置值,报错并退出init过程。单位固定为MB,可选 128 ~ 1024

1024

_archive_statistics

是否启用归档统计功能,默认n

n

_continue_incr

是否启用永久增量备份功能,默认n

n

_repo_disk_check_warn

当REPO所在磁盘分区的剩余容量低于此设置值,告警提示用户,对备份 和归档生效。单位固定为MB,默认16384;对s3云存储不生效

16384

_repo_disk_check_error

当REPO所在磁盘分区的剩余容量低于此设置值,报错提示用户,对备份 和归档生效。单位固定为MB,默认1024;对s3云存储不生效

1024

_repo_type

指定REPO的类型,目前支持posix和s3两种,默认值posix,无需额外 附加参数,s3需要设置以下s3附加参数

s3

_repo_s3_bucket

s3类型存储的bucket标签,字符串参数

bucket-name

_repo_s3_endpoint

s3类型存储的核心API地址,为HTTPS连接串,字符串参数

https://192.168.1.37:9000

_repo_s3_region

s3类型存储的区域描述,字符串参数

chengdu

_repo_s3_key

s3类型存储的用户key,字符串参数

admin

_repo_s3_key_secret

s3类型存储的用户key-secret,字符串参数

admin

备注:集群物理备份配置参数_target_db_style,可选single或cluster或single-pro。 single对应单机模式的目标数据库实例,cluster对应集群模式的目标数据库实例,single-pro对应集群模式的每个DB节点独立备份。

2. 执行初始化操作

首先,管理员应当在sys_backup.sh init前,明确REPO角色所在的节点,确保在REPO节点上执行init初始化操作。

初始化配置流程:

  1. 配置文件参数有效性检查
  2. 检查数据库实例的未归档WAL的数量
  3. 配置REPO节点的运行时配置文件sys_rman.conf
  4. 配置各DB节点的运行时配置文件sys_rman.conf
  5. 修改各DB节点的archive_command配置,reload数据库实例
  6. 创建备份stanza,执行第一次全量备份

注意:

通过sys_backup.sh执行初始化后,会自动启用WAL日志归档,sys_rman会统一管理归档日志和备份集,无需人工手动干预。

数据库默认开启归档,配置参数archive_mode的默认值为always,如果未设置归档模式,更改归档模式需要重启数据库。

3. 备份任务的启停 

sys_backup.sh命令格式说明:

Usage: sys_backup.sh {init | start | stop | pause | unpause}

参数说明:

  • init:初始化备份还原功能,该命令依赖于数据库实例已经正常工作,请勿在数据库业务繁忙时执行,业务繁忙时,可能会由于归档没落盘,或其他条件检查导致初始化失败
  • start:启动CRONTAB任务来完成备份功能
  • stop:停止CRONTAB任务来完成备份功能
  • pause:暂时停止备份功能
  • unpause:恢复被暂停的备份功能

执行sys_backup.sh start 即可开启自动定时备份功能,执行 sys_backup.sh stop 即可关闭自动定时备份功能。

sys_backup.sh start

脚本使用crontab命令增加定时任务,使用sys_rman进行定时备份;可以通过crontab -l 查看定时任务。

全量备份、差异备份、增量备份,均为可选。

备份类型、备份周期和备份时间由配置文件sys_backup.conf指定。

在sys_backup.conf配置为cluster的情况下,整个集群只需要在REPO节点上执行;

在sys_backup.conf配置为single-pro的情况下,每个DB节点都是REPO节点,需要逐个执行start。

sys_backup.sh stop

从系统CRONTAB中移除所有sys_rman相关的备份条目。

在sys_backup.conf配置为cluster的情况下,整个集群只需要在REPO节点上执行;

在sys_backup.conf配置为single-pro的情况下,每个DB节点都是REPO节点,需要逐个执行stop。

$ sys_backup.sh stop

Disable all sys_rman in crontab-daemon

sys_backup.sh pause

暂时停止定时备份动作。

$ sys_backup.sh pause

Puase the sys_rman...DONE

sys_backup.sh unpause 

恢复被暂停的定时备份动作。

$ sys_backup.sh unpause

Un-Puase the sys_rman...DONE

4. sys_backup.conf 信息变化处理

如果sys_backup.conf中关于数据库的信息(包含IP、数据库名、端口等)有所修改,需要重新初始化备份。

执行 sys_backup.sh init重新初始化备份功能。

如果sys_backup.conf中关于备份周期和时间点的信息有所修改,重新配置即可。

执行sys_backup.sh start重新配置自动备份周期。

有关备份集查看与备份优化配置相关操作请参考 附录A:备份管理与优化操作 。

有关sys_rman配置信息请参阅 附录B:sys_rman.conf配置说明 。

4、使用 sys_rman 工具备份命令

除了在 sys_rman 工具的初始化配置中设置自动备份任务,也可以手动备份。手动备份并不影响自动备份任务的运行,但要注意同一时间只能有一个备份在运行,所以手动执行时尽量错开自动备份时间或者暂停自动备份。

备份命令格式:

/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman

--config=<配置文件>

--stanza=<名称>

--type=[ full | diff | incr | page]

--<备份选项>

backup

根据备份类型可以分为:全量备份、差异备份、增量备份-文件粒度、块增量备份-块粒度。

全量备份

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

差异备份

依赖于上一次全量备份,针对此全量备份有变化的数据文件进行一次备份,产生的备份集配合依赖的全量备份集构成还原的基础。

增量备份-文件粒度

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

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

块增量备份-块粒度

块增量备份,依赖于上一次全量备份及中间变化的备份,针对上一个备份有变化的数据块进行一次备份,产生的备份集配合依赖的全量备份集及串行依赖备份集构成还原的基础。

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

块增量备份,需要Kingbase数据库开启了ktrack插件,请参考《 KingbaseES插件参考手册 》 ktrack 

注意:开启ktrack插件的数据库应与sys_rman块备份时连接的数据库一致,默认情况下都为initdb时创建的test库,无须特别指定;如在其他库开启ktrack插件(不推荐),则执行sys_rman 块备份时,需使用 --kb1-database 指定:

备份集管理

查看已有的备份集

在文件层面,<REPO_PATH>包含三个内容:

  1. sys_rman.conf,运行时配置文件
  2. archive,归档WAL日志的目标目录
  3. backup,保存各备份的目标目录

列出或查看<REPO_PATH>中的文件可有助于诊断备份和恢复问题。可以使用rsync等带有复制正确性校验的工具对<REPO_PATH>进行完整的复制。

工具提供命令,查看已有备份集列表和概要信息

/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase info

  • 第一行表示备份集的类型和备份集的名称
  • timestamp start表示备份开始的时间点
  • timestamp stop 表示备份结束的时间点
  • wal start表示备份开始时的WAL日志文件
  • wal stop表示备份结束时的WAL日志文件
  • database size 表示数据库的运行时磁盘容量
  • database backup size 表示数据库的备份容量
  • backup set size 表示当前备份集的容量
  • backup size 表示当前备份集的实际磁盘容量,包含压缩因素和依赖备份集冗余
  • backup reference list 表示当前备份集依赖备份集列表

自动清除过期的备份

在运行时配置文件sys_rman.conf中设置定期清除功能的保留数目:

repo1-retention-full=5

每一次备份结束后,工具将自动执行一次清除过期备份的动作。

清理备份集时会根据时间排序,保留最新的备份集,清除最老的备份集。

超过此数目的全量备份集将被清除;其依赖的备份集自动被清除;清除备份集包含数据库文件和对应的归档WAL日志文件。

手动清除过期的备份

手动调用expire命令:

  • 确认sys_rman.conf中的设置:保留全量备份集的数目repo1-retention-full=5
  • 执行 /home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase expire

备份集检查

可手动执行sys_rman的verify命令对备份集和归档文件进行检查并报告识别的问题:

/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase verify

verify命令检查归档文件依赖于归档文件信息(比如归档文件长度、归档文件校验值等),这些信息在启用归档统计功能后是从归档统计文件中获取到的,而不是默认的通过遍历归档目录获取。

5、使用 sys_rman 工具的还原与恢复命令

物理还原即使用sys_rman将当时做备份的物理文件恢复回来,但由于物理备份时,数据库还是会有不断的数据写入,因此拷贝过程中,物理文件可能已经发生了变化。数据库在物理还原(以下简称还原)结束后,还要进行数据库自己的恢复(以下简称恢复)过程,才能最终达成数据库一致性状态,对外提供服务。

因此,真正恢复数据库到用户所用状态,分为了还原和恢复两个部分。

注意:还原和恢复完成之后,应该尽快进行一次全量备份。

还原

还原操作说明:

  • 还原动作,只能在数据库节点上进行。
  • 还原完成后,数据库启动后,请及时手动清除kingbase.auto.conf文件中还原过程写入的相关还原参数。
  • 若是集群环境,还原后的数据库节点将成为集群的新主节点,利用该节点重做备库,参考 《 金仓数据守护集群和读写分离集群使用手册 》;集群完整启动后,可选择新的主节点。
  • 还原时,需要确保kingbase进程已经停止。
  • 还原时,KB_DATA目录下如果还有文件存在,需要--delta选项进行选择性还原。
  • 还原时,KB_DATA目录下如果没有文件存在,以下的还原方式均可使用。

还原命令格式:

/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman

--config=<配置文件>

--stanza=<名称>

--<还原选项>

restore

1.默认还原到最新时间点

sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase restore

2.还原到其它目录。

sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase \

--kb1-path=/home/kingbase/data01 \

--tablespace-map=tbs01=/home/kingbase/tbs02 restore

备份时,表空间是默认地、隐式地包含在备份文件集中。还原时,工具默认按原位置重建表空间的软链接,

--tablespace-map/--tablespace-map-all 选项可选,如果设置,那指定的表空间的软链接将指向新的自定义表空间文件夹。

3.基于指定备份集还原

不指定时间,工具将隐式地指定时间为备份集结束时间的后一秒。--delta选项可选,用于DATA目录存在文件时

sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set='20250327-142249F' --delta restore

指定时间,工具将验证指定时间是否晚于备份集结束时间;如否,报错退出。

sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set='20250327-142249F' --type=time --target='2025-03-27 16:28:17' restore

4.基于指定时间点的还原

sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --type=time --target='2025-03-27 14:18:20' --delta restore

使用指定的时间点还原到特定状态

--delta选项可选,用于KB_DATA目录存在文件时

--target-exclusive选项可选,用于表示是否排除等于指定时间的内容。

--target-action=pause 默认选项,恢复完成后,数据库启动后进入只读状态

--target-action=promote 恢复完成后,switch timeline,数据库启动后进入读写状态

--target-action=shutdown 恢复完成后,关闭数据库

5.基于指定事务ID(xid)的还原。

sys_rman--config=/backup/rman/sys_rman.conf \--stanza=kingbase \

--type=xid--target='1047' \--set='20200519-031336F ' \--target-action=promote \ restore

--delta选项可选,用于KB_DATA目录存在文件时

--target-exclusive选项可选,用于表示是否排除等于指定xid的内容。

还原后节点处理

在kingbase的主配置hot_standby=on的情况下,此选项有效。

--target-action=pause 默认选项,恢复完成后,数据库启动后进入只读状态

--target-action=promote 恢复完成后,switch timeline,数据库启动后进入读写状态

--target-action=shutdown 恢复完成后,关闭数据库

根据物理备份还原的理念,还原后,数据库用户的密码同时还原到指定备份集或时间点的状态。如果需要,请使用超级管理员去重置相关的数据库用户的密码。

恢复

数据恢复过程,指的是经过还原动作后,新的数据库实例拥有了基本的数据文件,第一次启动数据库时,数据库根据恢复配置文件去拉取归档的WAL日志,进行REDO的过程。

恢复配置文件位于/kingbase.auto.conf,涉及恢复的部分主要包含以下配置项:

1.PITR的恢复策略

指定备份集、指定事务ID、指定时间点均属于PITR方式,上述方式还原后,需要谨慎地进行恢复。

PITR还原后,默认恢复方式为pause,启动数据库后只能执行只读操作以检查是否符合恢复预期,若符合恢复预期请执行 select sys_wal_replay_resume() ,之后数据库进入读写状态;若不符合恢复预期,请关闭并删除该数据库,重新做还原。

当仅用来测试数据是否恢复到某个想要的恢复点时,无须执行 select sys_wal_replay_resume() ,执行实际数据查询即可;但需要注意,数据库开始接受只读查询并不表示已经恢复到指定状态,需执行 select sys_is_wal_replay_paused() 来判断,如果是true表明数据库已经恢复完成。

当恢复完成的数据库实例需要继续投入生产时,执行 select sys_wal_replay_resume() ,数据库进入读写状态。

例外的情况,当PITR指定的时间超过了所有备份集的时间覆盖范围,则数据库REDO过程中始终无法找到想要停止的点,直到拉取了所有的归档WAL日志;此时,数据库自动跳过REDO模式,进入读写状态,在此场景下无须执行 select sys_wal_replay_resume() 。

2.集群还原恢复策略

如果集群中一个节点出现严重问题时,应该采用repmgr工具的clone功能恢复集群;

新节点上线后,使用repmgr工具接入集群中。

如果集群所有节点都出现严重问题时,采用工具sys_rman进行还原:

  1. 选择一个数据库节点,使用还原功能;
  2. 在新的主节点上,启动数据库
  3. 如果还原时使用了PITR功能(含指定备份集或指定时间等),在clone之前,删除刚刚还原的主节点的 /kingbase.auto.conf 文件中的 recovery_* 配置参数,包含 restore_command,recovery_target,recovery_target_action 等
  4. 使用repmgr工具在备库节点clone并register到主节点;
  5. 整个集群恢复正常工作状态。

kingbase.auto.conf配置文件示例,PITR还原后,末尾三行应该删除。

restore_command = '/home/kingbase/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase archive-get %f "%p"'

recovery_target_time = '2023-07-03 17:30:04'

[kingbase@DB-NODE /home/kingbase/cluster/kingbase/bin]

三、常用物理备份架构

按照部署方式可以分为独立备份、非独立备份两种方式

部署方式

说明

独立备份

(1)在数据库节点以外,搭建一台专用于备份的服务器节点。

(2)要求备份服务器与所有数据库节点网络通畅。

(3)备份目标可以是单节点或多节点集群,支持对多个目标备份。

非独立备份

(1)非独立备份指的是在现有数据库节点上进行备份还原的操作。

(2)要求具有良好的独立存储通道和充足的存储空间

(3)多节点情况下需要每个节点都启用本地备份。

非独立备份的典型场景

1、单机+内部备份

此场景为单机数据库节点内部备份,方便部署和操作,但备份REPO与数据库实例处于同一个物理主机,冗余度较低。

2、一主一备+内部备份

此场景为主备双机常规环境设计,其中repo 节点位于当前数据库服务器的主节点。可选配置从备库拷贝数据文件,极大地减少备份为主库带来的性能损耗。

独立备份的典型场景

1、单机+外部备份

此场景为单机数据库节点和REPO备份服务器节点。备份服务器是一个单独的物理设备,相对独立,具有较高的冗余度,备份不会随着数据库节点故障而失效。

2、一主一备+外部备份

此场景为主备双机常规环境设计,其中REPO节点位于独立的服务器。可选配置从备库拷贝数据文件,极大地减少备份为主库带来的性能损耗,且增加了第三方专用存储服务器,用于存放和管理备份文件。

四、REPO 备份仓库节点环境准备

1、REPO 节点kingbase环境部署

REPO节点的搭建可以采用安装KingbaseES软件或拷贝文件目录的方式。

安装方式:

请在对应的REPO服务器上,安装KingbaseES 产品,安装目录必须与当前环境中的DB数据库节点安装目录一致;

输入安装目录 /opt/Kingbase/ES/V9,安装参考如下:https://www.modb.pro/db/1796681788420083712

拷贝方式:

拷贝DB数据库节点目录下的所有文件和文件夹,包含bin、lib、share、etc等子文件夹,拷贝到REPO服务器上,位置和DB数据库节点安装目录保持一致。

以DB节点安装到/opt/Kingbase/ES/V9为例:

$ ls /opt/Kingbase/ES/V9/Server

bin copy_file etc include lib log share


安装或拷贝后的REPO节点,在/opt/Kingbase/ES/V9/Server目录具有相关内容:

$ ls /opt/Kingbase/ES/V9/Server

bin copy_file etc include lib log share


2、配置 kingbase 用户环境变量

须在启动 Ksql 之前设置环境变量,或者至少验证它们是否设置正确,参考如下:

$ cat ~/.bashrc

export KINGBASE_HOME=/opt/Kingbase/ES/V9/Server

export PATH=$KINGBASE_HOME/bin:$PATH

export LD_LIBRARY_PATH=$KINGBASE_HOME/lib:$LD_LIBRARY_PATH

$ ksql -V

ksql (Kingbase) V009R001C002B0014

3、配置节点间kingbase用户SSH或者sys_securecmd互信

数据节点和备份节点,root用户和数据库用户应该是ssh免密登录的,且交叉免密登录。

参考https://www.modb.pro/db/1796681788420083712

五、备份恢复案例

根据常用备份架构场景进行备份恢复操作。

1、在单机+内部场景

测试环境如下:

节点IP

数据库软件安装目录

数据库数据目录

描述

192.168.126.20

/opt/Kingbase/ES/V9

/home/kingbase/data

单节点

192.168.126.21

/opt/Kingbase/ES/V9

/home/kingbase/data

目标DB节点

1、环境准备

1.启动KES

$ sys_ctl start

2.在DB节点配置管理员kingbase用户本地免密登录

$ cd ~

$ sys_encpwd -H \* -P \* -D \* -U system -W kingbase

$ cat ~/.encpwd

3.允许kingbase用户使用crontab

# su – root

# chmod a+x,u+s /usr/bin/crontab

# ls -l /usr/bin/crontab

4.创建并配置备份目录权限

# su – root

# mkdir /backup

# chown -R kingbase:dba /backup

# chmod 755 /backup

# ls -ld /backup

2、准备初始化配置文件

1.拷贝初始化配置文件

$ cd $KINGBASE_HOME

$ cp share/sys_backup.conf bin/


2.编辑初始化备份文件

$ cd bin

$ sed -i 's/_target_db_style="cluster"/_target_db_style="single"/g' sys_backup.conf

$ sed -i 's/_one_db_ip="192.168.28.37"/_one_db_ip="192.168.126.20"/g' sys_backup.conf

$ sed -i 's/_repo_ip="192.168.28.37"/_repo_ip="192.168.126.20"/g' sys_backup.conf

$ sed -i 's/_repo_path="\/home\/kingbase\/kbbr_repo"/_repo_path="\/backup\/rman"/g' sys_backup.conf

$ sed -i 's/_single_data_dir="\/home\/kingbase\/ES\/single\/data"/_single_data_dir="\/home\/kingbase\/data"/g' sys_backup.conf

$ sed -i 's/_single_bin_dir="\/home\/kingbase\/ES\/single\/Server\/bin"/_single_bin_dir="\/opt\/Kingbase\/ES\/V9\/Server\/bin"/g' sys_backup.conf

$ sed -i 's/_use_scmd=on/_use_scmd=off/g' sys_backup.conf

# 查看sys_backup.conf

$ grep -v ^# $KINGBASE_HOME/bin/sys_backup.conf

_target_db_style="single"

_one_db_ip="192.168.126.20"

_repo_ip="192.168.126.20"

_stanza_name="kingbase"

_os_user_name="kingbase"

_repo_path="/backup/rman"

_repo_retention_full_count=5

_crond_full_days=7

_crond_diff_days=0

_crond_incr_days=1

_crond_full_hour=2

_crond_diff_hour=3

_crond_incr_hour=4

_band_width=0

_os_ip_cmd="/sbin/ip"

_os_rm_cmd="/bin/rm"

_os_sed_cmd="/bin/sed"

_os_grep_cmd="/bin/grep"

_os_base64_cmd="/bin/base64"

_single_data_dir="/home/kingbase/data"

_single_bin_dir="/opt/Kingbase/ES/V9/Server/bin"

_single_db_user="system"

_single_db_port="54321"

_use_scmd=off

_start_fast=y

_compress_type=none

_non_archived_space=1024

_archive_statistics=n

_continue_incr=n

_repo_disk_check_warn=16384

_repo_disk_check_error=1024

_repo_type=posix

_repo_s3_bucket=bucket-name

_repo_s3_endpoint=https://192.168.1.37:9000

_repo_s3_region=chengdu

_repo_s3_key=admin

_repo_s3_key_secret=admin

3、做备份初始化

$ sys_backup.sh init

# pre-condition: check the non-archived WAL files

# generate single sys_rman.conf...DONE

# update single archive_command with sys_rman.archive-push...DONE

# create stanza and check...(maybe 60+ seconds)

# create stanza and check...DONE

# initial first full backup...(maybe several minutes)

# initial first full backup...DONE

# Initial sys_rman OK.

'sys_backup.sh start' should be executed when need back-rest feature.

4、检查sys_rman命令和归档配置是否正确,是否可以正常备份和归档

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase check

5、执行全量备份任务

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase --archive-copy --type full backup

2025-04-03 13:31:47.900 P00 INFO: check command begin 2.27: --no-archive-mode-check --archive-timeout=600 --band-width=0 --config=/backup/rman/sys_rman.conf --exec-id=10904-fac0b9e1 --kb1-path=/home/kingbase/data --kb1-port=54321 --kb1-user=system --log-level-console=info --log-level-file=info --log-path=/opt/Kingbase/ES/V9/Server/log --log-subprocess --process-max=4 --repo1-path=/backup/rman --stanza=kingbase

WARN: set process-max 4 is too large, auto set to CPU core count 2

2025-04-03 13:31:47.917 P00 INFO: check repo1 configuration (primary)

2025-04-03 13:31:47.939 P00 INFO: check repo1 archive for WAL (primary)

2025-04-03 13:31:48.140 P00 INFO: WAL segment 00000001000000000000000F successfully archived to '/backup/rman/archive/kingbase/12-1/0000000100000000/00000001000000000000000F-388c0d6388dec3515ee2fd0b6b9a51ed44352d70' on repo1

2025-04-03 13:31:48.140 P00 INFO: check command end: completed successfully (243ms)

6、查看备份集信息

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

WARN: set process-max 4 is too large, auto set to CPU core count 2

stanza: kingbase

status: ok

cipher: none

db (current)

wal archive min/max (V009R001C002B0014): 00000001000000000000000C/00000001000000000000000F

full backup: 20250403-133132F

timestamp start/stop: 2025-04-03 13:31:32 / 2025-04-03 13:31:35

wal start/stop: 00000001000000000000000D / 00000001000000000000000E

database size: 106.3MB, database backup size: 106.3MB

repo1: backup set size: 106.3MB, backup size: 106.3MB

$ ls -l /backup/rman

archive backup sys_rman.conf

$ grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

kb1-port=54321

kb1-user=system

[global]

repo1-path=/backup/rman

repo1-retention-full=5

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

process-max=4

compress-type=none

compress-level=3

start-fast=y

link-all=y

archive-mode-check=n

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

non-archived-space=1024

archive-timeout=600

7、源节点备份恢复之本机恢复

1.关闭原库,删除数据库文件,或者新建数据库恢复目录

$ sys_ctl stop

$ mkdir -p /home/kingbase/data1

2.查看 sys_rman.conf 配置文件

##本次恢复到/home/kingbase/data1目录,调整kb1-path=/home/kingbase/data1

$ grep -E 'kb1-path' /backup/rman/sys_rman.conf

3.执行指定备份集恢复全量备份命令

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250403-133132F" --delta restore

2025-04-03 16:10:38.168 P00 INFO: restore command begin 2.27: --band-width=0 --config=/backup/rman/sys_rman.conf --delta --exec-id=14524-b1fc1c06 --kb1-path=/home/kingbase/data1 --link-all --log-level-console=info --log-level-file=info --log-path=/opt/Kingbase/ES/V9/Server/log --log-subprocess --non-archived-space=1024 --process-max=4 --repo1-path=/backup/rman --set=20250403-133132F --stanza=kingbase

WARN: set process-max 4 is too large, auto set to CPU core count 2

WARN: sys_rman auto set target time to backupset stop time 2025-04-03 13:31:36

2025-04-03 16:10:38.180 P00 INFO: repo1: restore backup set 20250403-133132F, recovery will start at 2025-04-03 13:31:32

2025-04-03 16:10:38.180 P00 INFO: remap data directory to '/home/kingbase/data1'

2025-04-03 16:10:38.181 P00 INFO: remove invalid files/links/paths from '/home/kingbase/data1'

2025-04-03 16:10:38.362 P00 INFO: Restore Process: FILE: 1 / 2364 0% SZIE: 16777216 bytes / 111495564 bytes 16MB / 106.3MB 15%

2025-04-03 16:10:38.857 P00 INFO: Restore Process: FILE: 2363 / 2364 99% SZIE: 111495564 bytes / 111495564 bytes 106.3MB / 106.3MB 100%

2025-04-03 16:10:38.958 P00 INFO: Restore Process: FILE: 2364 / 2364 100% SZIE: 111495564 bytes / 111495564 bytes 106.3MB / 106.3MB 100%

2025-04-03 16:10:38.958 P00 INFO: write updated /home/kingbase/data1/kingbase.auto.conf

2025-04-03 16:10:38.961 P00 INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)

2025-04-03 16:10:38.962 P00 INFO: restore size = 106.3MB, file total = 2364

2025-04-03 16:10:38.962 P00 INFO: restore command end: completed successfully (798ms)

4.启动数据库并验证数据是否正常

$ sys_ctl start -D /home/kingbase/data1

waiting for server to start....2025-04-03 16:12:22.172 CST [14564] LOG: sepapower extension initialized

2025-04-03 16:12:22.176 CST [14564] LOG: starting KingbaseES V009R001C002B0014 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit

2025-04-03 16:12:22.176 CST [14564] LOG: listening on IPv4 address "0.0.0.0", port 54321

2025-04-03 16:12:22.176 CST [14564] LOG: listening on IPv6 address "::", port 54321

2025-04-03 16:12:22.177 CST [14564] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"

2025-04-03 16:12:22.252 CST [14564] LOG: redirecting log output to logging collector process

2025-04-03 16:12:22.252 CST [14564] HINT: Future log output will appear in directory "sys_log".

done

server started

8、源节点备份恢复之异机恢复

1.修改sys_rman.conf参数kb1-host为目标DB节点IP

grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

kb1-port=54321

kb1-user=system

kb1-host=192.168.126.21

kb1-host-user=kingbase

[global]

repo1-path=/backup/rman

repo1-retention-full=5

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

process-max=4

compress-type=none

compress-level=3

start-fast=y

link-all=y

archive-mode-check=n

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

non-archived-space=1024

archive-timeout=600

2.将源DB节点sys_rman.conf配置文件拷贝到目标DB节点并修改配置

$ scp -r kingbase@192.168.126.20:/backup/rman/sys_rman.conf /backup/rman/

$ grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

[global]

repo1-host=192.168.126.20

repo1-host-user=kingbase

repo1-host-config=/backup/rman/sys_rman.conf

repo1-path=/backup/rman

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

#### support: gz none

compress-type=none

compress-level=3

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

link-all=y

archive-timeout=600

archive-mode-check=n

3.执行指定备份集在目标DB节点恢复sys_rman备份文件

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250403-133132F" restore

或者

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250403-133132F" --delta restore

2025-04-03 16:20:27.101 P00 INFO: restore command begin 2.27: --band-width=0 --config=/backup/rman/sys_rman.conf --delta --exec-id=13912-dd94e6ea --kb1-path=/home/kingbase/data --link-all --log-level-console=info --log-level-file=info --log-path=/opt/Kingbase/ES/V9/Server/log --log-subprocess --repo1-host=192.168.126.20 --repo1-host-config=/backup/rman/sys_rman.conf --repo1-host-user=kingbase --repo1-path=/backup/rman --set=20250403-133132F --stanza=kingbase

WARN: sys_rman auto set target time to backupset stop time 2025-04-03 13:31:36

2025-04-03 16:20:27.357 P00 INFO: repo1: restore backup set 20250403-133132F, recovery will start at 2025-04-03 13:31:32

2025-04-03 16:20:27.359 P00 INFO: remove invalid files/links/paths from '/home/kingbase/data'

2025-04-03 16:20:27.679 P00 INFO: Restore Process: FILE: 1 / 2364 0% SZIE: 16777216 bytes / 111495564 bytes 16MB / 106.3MB 15%

2025-04-03 16:20:30.340 P00 INFO: Restore Process: FILE: 2364 / 2364 100% SZIE: 111495564 bytes / 111495564 bytes 106.3MB / 106.3MB 100%

2025-04-03 16:20:30.340 P00 INFO: write updated /home/kingbase/data/kingbase.auto.conf

2025-04-03 16:20:30.343 P00 INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)

2025-04-03 16:20:30.343 P00 INFO: restore size = 106.3MB, file total = 2364

2025-04-03 16:20:30.344 P00 INFO: restore command end: completed successfully (3246ms)

4.启动数据库并验证数据是否正常

$ sys_ctl start -D /home/kingbase/data

2、在一主一备+内部备份场景

测试环境如下:

节点IP

数据库软件安装目录

数据库数据目录

描述

192.168.126.15

/opt/Kingbase/ES/V9/kingbase

/home/kingbase/data

主节点

192.168.126.16

/opt/Kingbase/ES/V9/kingbase

/home/kingbase/data

从节点

1、环境准备

1.查看OS配置信息

$ cat ~/.bashrc

$ cat /etc/hosts

2.查看集群信息

$ repmgr service status

ID | Name | Role | Status | Upstream | repmgrd | PID | Paused? | Upstream last seen

----+-------+---------+-----------+----------+---------+------+---------+--------------------

1 | node1 | primary | * running | | running | 2872 | no | n/a

2 | node2 | standby | running | node1 | running | 2541 | no | 1 second(s) ago

3.主备节点配置管理员用户本地免密登录

$ cd ~

$ sys_encpwd -H \* -P \* -D \* -U system -W kingbase123

$ cat ~/.encpwd

*:*:*:esrep:S2luZ2Jhc2VoYTExMA==

*:*:*:system:a2luZ2Jhc2UxMjM=

4.允许备份节点kingbase用户使用crontab

# su – root

# chmod a+x,u+s /usr/bin/crontab

# ls -l /usr/bin/crontab

5.创建并配置备份目录权限

# su – root

# mkdir /backup

# chown -R kingbase:dba /backup

# chmod 755 /backup

# ls -ld /backup

2、准备初始化配置文件

注意事项:

  • 备份初始化可以在主节点也可以在备节点操作,确定备份节点后,后续备份操作都需要在这个节点执行。
  • 数据库的恢复操作可以选择在集群任意的一个数据节点进行。
  • 可选从备库拷贝数据文件,极大地减少备份为主库带来的性能损耗。

1.拷贝初始化配置文件

$ cd $KINGBASE_HOME

$ cp share/sys_backup.conf bin/

2.编辑初始化备份文件(设置需要备份的ip和备份到的ip以及备份到的目录)

$ cd bin

$ sed -i 's/_one_db_ip="192.168.28.37"/_one_db_ip="192.168.126.16"/g' sys_backup.conf

$ sed -i 's/_repo_ip="192.168.28.37"/_repo_ip="192.168.126.16"/g' sys_backup.conf

$ sed -i 's/_repo_path="\/home\/kingbase\/kbbr_repo"/_repo_path="\/backup\/rman"/g' sys_backup.conf

#设置不使用sys_securecmd

sed -i 's/_use_scmd=on/_use_scmd=off/g' sys_backup.conf

$ grep -v ^# $KINGBASE_HOME/bin/sys_backup.conf

3、做备份初始化

$ sys_backup.sh init

提示可以通过添加定时任务完成备份也可以手工备份。

4、检查sys_rman命令和归档配置是否正确,是否可以正常备份和归档

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase check

提示WAL日志已成功被归档到/backup/rman/archive/kingbase/目录

5、执行全量备份任务

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase --archive-copy --type full backup

6、查看备份集信息

在备节点查看

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

$ ls -l /backup/rman

$ grep -v ^# /backup/rman/sys_rman.conf

在主节点查看

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

$ ls -l /backup/rman

$ cat /backup/rman/sys_rman.conf

7、主备集群单节点故障恢复

对于 primary 节点故障,standby 节点会自动接管 primary role 及 VIP,业务切换连接到新的 primary。这里的故障恢复处理主要是指故障节点重新加入的过程。简单步骤如下:

1.关闭原库,删除数据库文件

2.故障节点恢复克隆

##举例192.168.126.16为当前主节点

$ repmgr standby clone -h 192.168.126.16 -U esrep -d esrep

提示你启动数据库之后需要注册备节点执行命令repmgr standby register --force

3.备节点启动实例

$ sys_ctl start -D $KINGBASE_DATA

4.备节点注册实例

在repmgr standby register -F命令中,-F(全称为--force)的主要作用是强制覆盖已有的注册信息。

$ repmgr standby register -F

5.重启集群

$ sys_monitor.sh restart

6.查看集群状态。

$ repmgr service status

8、集群主备节点均损坏还原

集群的恢复步骤:

首先需要停止集群服务 ,然后利用sys_rman恢复主节点,再利用repmgr进行 备机还原 ,恢复备节点。

集群还原后,确认数据是否符合预期,观察应用或手动的数据操作是否同步到备节点以验证集群还原是否成功。

1.关闭原库,删除数据库文件

$ sys_monitor.sh stop

2.查看 sys_rman.conf 配置文件

##本次原机恢复到/home/kingbase/data目录,恢复目录调整请修改kb1-path=参数。

$ grep -E 'kb1-path|repo1-host' /backup/rman/sys_rman.conf

kb1-path=/home/kingbase/data

repo1-host=192.168.126.16

repo1-host-user=kingbase

repo1-host-config=/backup/rman/sys_rman.conf

3.主节点执行数据库完全恢复命令

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --delta restore

也可以--set 指定备份集完全恢复

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250609-145558F" --delta restore

4.启动实例

$ sys_ctl start -D $KINGBASE_DATA

5.注册实例。

在repmgr primary register-F命令中,-F(全称为--force)的主要作用是强制覆盖已有的注册信息。

$ repmgr primary register -F

6.查看集群状态。

$ repmgr service status

7.恢复备节点

参考步骤《7、主备集群单节点故障恢复》恢复。

8.查看集群状态并验证数据是否正常

3、在单机+外部场景

测试环境配置

节点IP

数据库软件安装目录

数据库数据目录

描述

192.168.126.19

/opt/Kingbase/ES/V9

REPO仓库节点

192.168.126.20

/opt/Kingbase/ES/V9

/home/kingbase/data

单机DB节点

192.168.126.21

/opt/Kingbase/ES/V9

/home/kingbase/data

异机DB节点

1、节点环境准备

1.配置REPO节点kingbase环境

安装kingbase或拷贝方式都可以

2.在DB节点配置管理员kingbase用户本地免密登录

$ cd ~

$ sys_encpwd -H \* -P \* -D \* -U system -W kingbase

$ cat ~/.encpwd

3.允许kingbase用户使用crontab

# su – root

# chmod a+x,u+s /usr/bin/crontab

# ls -l /usr/bin/crontab

4.创建存放备份文件和归档日志文件的目录(所有节点)

创建存放备份文件和归档日志文件的目录,默认目录路径:/home/kingbase/kbbr_repo/。

# su – root

# mkdir /backup

# chown -R kingbase:dba /backup

# chmod 755 /backup

# ls -ld /backup

2、准备初始化配置文件 (repo节点)

1.拷贝初始化配置文件

$ cd $KINGBASE_HOME

$ cp share/sys_backup.conf bin/

2.编辑初始化备份文件

$ cd bin

#设置为单机模式

sed -i 's/_target_db_style="cluster"/_target_db_style="single"/g' sys_backup.conf

#设置DB节点IP

sed -i 's/_one_db_ip="192.168.28.37"/_one_db_ip="192.168.126.20"/g' sys_backup.conf

#设置REPO节点IP

sed -i 's/_repo_ip="192.168.28.37"/_repo_ip="192.168.126.19"/g' sys_backup.conf

#设置存放备份文件和归档日志文件的目录

sed -i 's/_repo_path="\/home\/kingbase\/kbbr_repo"/_repo_path="\/backup\/rman"/g' sys_backup.conf

#设置数据库集簇目录的路径

sed -i 's/_single_data_dir="\/home\/kingbase\/ES\/single\/data"/_single_data_dir="\/home\/kingbase\/data"/g' sys_backup.conf

#设置数据库软件的bin目录

sed -i 's/_single_bin_dir="\/home\/kingbase\/ES\/single\/Server\/bin"/_single_bin_dir="\/opt\/Kingbase\/ES\/V9\/Server\/bin"/g' sys_backup.conf

#设置不使用sys_securecmd

sed -i 's/_use_scmd=on/_use_scmd=off/g' sys_backup.conf

查看修改是否符合预期

$ grep -v ^# $KINGBASE_HOME/bin/sys_backup.conf

_target_db_style="single"

_one_db_ip="192.168.126.20"

_repo_ip="192.168.126.19"

_stanza_name="kingbase"

_os_user_name="kingbase"

_repo_path="/backup/rman"

_repo_retention_full_count=5

_crond_full_days=7

_crond_diff_days=0

_crond_incr_days=1

_crond_full_hour=2

_crond_diff_hour=3

_crond_incr_hour=4

_band_width=0

_os_ip_cmd="/sbin/ip"

_os_rm_cmd="/bin/rm"

_os_sed_cmd="/bin/sed"

_os_grep_cmd="/bin/grep"

_os_base64_cmd="/bin/base64"

_single_data_dir="/home/kingbase/data"

_single_bin_dir="/opt/Kingbase/ES/V9/Server/bin"

_single_db_user="system"

_single_db_port="54321"

_use_scmd=off

_start_fast=y

_compress_type=none

_non_archived_space=1024

_archive_statistics=n

_continue_incr=n

_repo_disk_check_warn=16384

_repo_disk_check_error=1024

_repo_type=posix

_repo_s3_bucket=bucket-name

_repo_s3_endpoint=https://192.168.1.37:9000

_repo_s3_region=chengdu

_repo_s3_key=admin

_repo_s3_key_secret=admin

3、做备份初始化(repo节点)

$ sys_backup.sh init

# pre-condition: check the non-archived WAL files

# generate single sys_rman.conf...DONE

# update single archive_command with sys_rman.archive-push...DONE

# create stanza and check...(maybe 60+ seconds)

# create stanza and check...DONE

# initial first full backup...(maybe several minutes)

# initial first full backup...DONE

# Initial sys_rman OK.

'sys_backup.sh start' should be executed when need back-rest feature.

#查看备份目录,初始化过程会自动创建备份目录结构

#repo节点

$ ls /backup/rman

archive backup sys_rman.conf

#查看sys_rman.conf配置文件初始化过程会自动在备份目录中创建sys_rman.conf配置文件,并且依照sys_backup.conf文件中的设置对sys_rman.conf文件中的参数进行设置,后续sys_rman命令将使用这个文件中配置的参数

#db节点

$ ls /backup/rman

sys_rman.conf

# 查看sys_rman.conf

$ grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

[global]

repo1-host=192.168.126.19

repo1-host-user=kingbase

repo1-host-config=/backup/rman/sys_rman.conf

repo1-path=/backup/rman

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

compress-type=none

compress-level=3

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

link-all=y

archive-timeout=600

archive-mode-check=n

# 查看归档参数去掉archive_command参数的注释,初始化过程中会自动为archive_command参数赋值

ksql -Usystem -dkingbase

kingbase=# show archive_mode;

archive_mode

--------------

always

(1 row)

kingbase=# show archive_command;

archive_command

---------------------------------------------------------------------------------------------------------------------------------------

export TZ=Asia/Shanghai;/opt/Kingbase/ES/V9/Server/bin/sys_rman --config /backup/rman/sys_rman.conf --stanza=kingbase archive-push %p

(1 row)

4、检查sys_rman命令和归档配置是否正确,是否可以正常备份和归档(repo节点)

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase check

2025-04-03 09:02:34.662 P00 INFO: check command begin 2.27: --no-archive-mode-check --archive-timeout=600 --band-width=0 --config=/backup/rman/sys_rman.conf --exec-id=4157-6c4ecd56 --kb1-host=192.168.126.20 --kb1-host-user=kingbase --kb1-path=/home/kingbase/data --kb1-port=54321 --kb1-user=system --log-level-console=info --log-level-file=info --log-path=/opt/Kingbase/ES/V9/Server/log --log-subprocess --process-max=4 --repo1-path=/backup/rman --stanza=kingbase

WARN: set process-max 4 is too large, auto set to CPU core count 2

2025-04-03 09:02:34.873 P00 INFO: check repo1 configuration (primary)

2025-04-03 09:02:34.926 P00 INFO: check repo1 archive for WAL (primary)

2025-04-03 09:02:36.569 P00 INFO: WAL segment 000000010000000000000008 successfully archived to '/backup/rman/archive/kingbase/12-1/0000000100000000/000000010000000000000008-07bc8462c6938d9bf51c3a2d2ffda9d23d8e2ebd' on repo1

2025-04-03 09:02:36.671 P00 INFO: check command end: completed successfully (2013ms)

5、查看备份集,初始化过程会自动做一次全量备份(repo节点)

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

WARN: set process-max 4 is too large, auto set to CPU core count 2

stanza: kingbase

status: ok

cipher: none

db (current)

wal archive min/max (V009R001C002B0014): 000000010000000000000005/000000010000000000000008

full backup: 20250403-084726F

timestamp start/stop: 2025-04-03 08:47:26 / 2025-04-03 08:47:42

wal start/stop: 000000010000000000000007 / 000000010000000000000007

database size: 90MB, database backup size: 90MB

repo1: backup set size: 90MB, backup size: 90MB

6、执行全量备份任务(repo节点)

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase --archive-copy --type full backup

7、查看备份集信息(db、repo节点都可以)

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

stanza: kingbase

status: ok

cipher: none

db (current)

wal archive min/max (V009R001C002B0014): 000000010000000000000005/00000001000000000000000A

full backup: 20250403-084726F

timestamp start/stop: 2025-04-03 08:47:26 / 2025-04-03 08:47:42

wal start/stop: 000000010000000000000007 / 000000010000000000000007

database size: 90MB, database backup size: 90MB

repo1: backup set size: 90MB, backup size: 90MB

full backup: 20250403-094809F

timestamp start/stop: 2025-04-03 09:48:09 / 2025-04-03 09:48:22

wal start/stop: 00000001000000000000000A / 00000001000000000000000A

database size: 90.3MB, database backup size: 90.3MB

repo1: backup set size: 90.3MB, backup size: 90.3MB

8、源节点备份恢复之本机恢复

1.关闭原库,删除数据库文件,或者新建恢复目录

$ sys_ctl stop

$ mkdir -p /home/kingbase/data1

2.查看 sys_rman.conf 配置文件

##本次恢复到/home/kingbase/data1目录,调整kb1-path=/home/kingbase/data1

$ grep -E 'kb1-path' /backup/rman/sys_rman.conf

kb1-path=/home/kingbase/data1

3.执行指定备份集的恢复全量备份命令

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250403-094809F" restore

2025-04-03 13:13:53.803 P00 INFO: restore command begin 2.27: --band-width=0 --config=/backup/rman/sys_rman.conf --exec-id=10154-dec9fc6c --kb1-path=/home/kingbase/data1 --link-all --log-level-console=info --log-level-file=info --log-path=/opt/Kingbase/ES/V9/Server/log --log-subprocess --repo1-host=192.168.126.19 --repo1-host-config=/backup/rman/sys_rman.conf --repo1-host-user=kingbase --repo1-path=/backup/rman --set=20250403-094809F --stanza=kingbase

WARN: sys_rman auto set target time to backupset stop time 2025-04-03 09:48:23

2025-04-03 13:13:54.059 P00 INFO: repo1: restore backup set 20250403-094809F, recovery will start at 2025-04-03 09:48:09

2025-04-03 13:13:54.059 P00 INFO: remap data directory to '/home/kingbase/data1'

2025-04-03 13:13:54.345 P00 INFO: Restore Process: FILE: 1 / 2362 0% SZIE: 16777216 bytes / 94712928 bytes 16MB / 90.3MB 17%

2025-04-03 13:14:02.180 P00 INFO: write updated /home/kingbase/data1/kingbase.auto.conf

2025-04-03 13:14:02.182 P00 INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)

2025-04-03 13:14:02.182 P00 INFO: restore size = 90.3MB, file total = 2362

2025-04-03 13:14:02.183 P00 INFO: restore command end: completed successfully (8383ms)

4.启动数据库并验证数据是否正常

$ sys_ctl start -D /home/kingbase/data1

waiting for server to start....2025-04-03 13:25:23.891 CST [10402] LOG: sepapower extension initialized

2025-04-03 13:25:23.894 CST [10402] LOG: starting KingbaseES V009R001C002B0014 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit

2025-04-03 13:25:23.894 CST [10402] LOG: listening on IPv4 address "0.0.0.0", port 54321

2025-04-03 13:25:23.894 CST [10402] LOG: listening on IPv6 address "::", port 54321

2025-04-03 13:25:23.896 CST [10402] LOG: listening on Unix socket "/tmp/.s.KINGBASE.54321"

2025-04-03 13:25:24.219 CST [10402] LOG: redirecting log output to logging collector process

2025-04-03 13:25:24.219 CST [10402] HINT: Future log output will appear in directory "sys_log".

done

server started

9、源节点备份恢复之异机恢复

1.修改sys_rman.conf参数kb1-host为异机DB节点IP

grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

kb1-port=54321

kb1-user=system

kb1-host=192.168.126.21

kb1-host-user=kingbase

[global]

repo1-path=/backup/rman

repo1-retention-full=5

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

process-max=4

compress-type=none

compress-level=3

start-fast=y

link-all=y

archive-mode-check=n

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

non-archived-space=1024

archive-timeout=600

2.将源DB节点sys_rman.conf配置文件拷贝到异机DB节点并修改配置

$ scp -r kingbase@192.168.126.20:/backup/rman/sys_rman.conf /backup/rman/

$ grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

[global]

repo1-host=192.168.126.19

repo1-host-user=kingbase

repo1-host-config=/backup/rman/sys_rman.conf

repo1-path=/backup/rman

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

#### support: gz none

compress-type=none

compress-level=3

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

link-all=y

archive-timeout=600

archive-mode-check=n

3. 在异机DB节点恢复

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase restore

或者

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250403-094809F" --delta restore

2025-04-03 10:29:25.952 P00 INFO: restore command begin 2.27: --band-width=0 --config=/backup/rman/sys_rman.conf --delta --exec-id=5959-78033037 --kb1-path=/home/kingbase/data --link-all --log-level-console=info --log-level-file=info --log-path=/opt/Kingbase/ES/V9/Server/log --log-subprocess --non-archived-space=1024 --process-max=4 --repo1-host=192.168.126.19 --repo1-host-config=/backup/rman/sys_rman.conf --repo1-host-user=kingbase --repo1-path=/backup/rman --set=20250403-094809F --stanza=kingbase

WARN: set process-max 4 is too large, auto set to CPU core count 2

WARN: sys_rman auto set target time to backupset stop time 2025-04-03 09:48:23

2025-04-03 10:29:26.210 P00 INFO: repo1: restore backup set 20250403-094809F, recovery will start at 2025-04-03 09:48:09

2025-04-03 10:29:26.212 P00 INFO: remove invalid files/links/paths from '/home/kingbase/data'

2025-04-03 10:29:26.353 P00 INFO: Restore Process: FILE: 1 / 2362 0% SZIE: 1425408 bytes / 94712928 bytes 1.4MB / 90.3MB 1%

2025-04-03 10:29:26.356 P00 INFO: Restore Process: FILE: 2 / 2362 0% SZIE: 2850816 bytes / 94712928 bytes 2.7MB / 90.3MB 3%

2025-04-03 10:29:26.359 P00 INFO: Restore Process: FILE: 3 / 2362 0% SZIE: 4276224 bytes / 94712928 bytes 4MB / 90.3MB 4%

2025-04-03 10:29:28.737 P00 INFO: Restore Process: FILE: 2360 / 2362 99% SZIE: 94712928 bytes / 94712928 bytes 90.3MB / 90.3MB 100%

2025-04-03 10:29:29.140 P00 INFO: Restore Process: FILE: 2361 / 2362 99% SZIE: 94712928 bytes / 94712928 bytes 90.3MB / 90.3MB 100%

2025-04-03 10:29:29.140 P00 INFO: Restore Process: FILE: 2362 / 2362 100% SZIE: 94712928 bytes / 94712928 bytes 90.3MB / 90.3MB 100%

2025-04-03 10:29:29.140 P00 INFO: write updated /home/kingbase/data/kingbase.auto.conf

2025-04-03 10:29:29.150 P00 INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)

2025-04-03 10:29:29.151 P00 INFO: restore size = 90.3MB, file total = 2362

2025-04-03 10:29:29.151 P00 INFO: restore command end: completed successfully (3203ms)

4.启动数据库并验证数据是否正常

$ sys_ctl start -D /home/kingbase/data

4、在一主一备+外部备份场景

测试环境如下:

节点IP

数据库软件安装目录

数据库数据目录

描述

192.168.126.15

/opt/Kingbase/ES/V9/kingbase

/home/kingbase/data

主节点

192.168.126.16

/opt/Kingbase/ES/V9/kingbase

/home/kingbase/data

从节点

192.168.126.17

/opt/Kingbase/ES/V9/kingbase

/home/kingbase/data

异机DB节点

192.168.126.19

/opt/Kingbase/ES/V9/kingbase

REPO仓库节点

1、节点环境准备

1.配置REPO节点kingbase环境

安装kingbase或拷贝方式都可以

2.查看集群信息

$ repmgr service status

ID | Name | Role | Status | Upstream | repmgrd | PID | Paused? | Upstream last seen

----+-------+---------+-----------+----------+---------+------+---------+--------------------

1 | node1 | primary | * running | | running | 2872 | no | n/a

2 | node2 | standby | running | node1 | running | 2541 | no | 1 second(s) ago

3.主备节点配置管理员kingbase用户本地免密登录

$ cd ~

$ sys_encpwd -H \* -P \* -D \* -U system -W kingbase

4.允许kingbase用户使用crontab

# su – root

# chmod a+x,u+s /usr/bin/crontab

# ls -l /usr/bin/crontab

5.创建存放备份文件和归档日志文件的目录(所有节点)

创建存放备份文件和归档日志文件的目录,默认目录路径:/home/kingbase/kbbr_repo/。

# su – root

# mkdir /backup

# chown -R kingbase:dba /backup

# chmod 755 /backup

# ls -ld /backup

2、准备初始化配置文件 (repo节点)

1.拷贝初始化配置文件

$ cd $KINGBASE_HOME

$ cp share/sys_backup.conf bin/

2.编辑初始化备份文件

$ cd bin

#设置为集群模式(默认集群模式,无需修改)

#设置DB节点IP(设置为备机IP)

sed -i 's/_one_db_ip="192.168.28.37"/_one_db_ip="192.168.126.16"/g' sys_backup.conf

#设置REPO节点IP

sed -i 's/_repo_ip="192.168.28.37"/_repo_ip="192.168.126.19"/g' sys_backup.conf

#设置存放备份文件和归档日志文件的目录

sed -i 's/_repo_path="\/home\/kingbase\/kbbr_repo"/_repo_path="\/backup\/rman"/g' sys_backup.conf

#设置不使用sys_securecmd

sed -i 's/_use_scmd=on/_use_scmd=off/g' sys_backup.conf

查看修改是否符合预期

$ grep -v ^# $KINGBASE_HOME/bin/sys_backup.conf

3、做备份初始化(repo节点)

$ sys_backup.sh init

$ sys_backup.sh init

# pre-condition: check the non-archived WAL files

# Check 192.168.126.15 archive-mode == always

# Check 192.168.126.16 archive-mode == always

# generate local sys_rman.conf...DONE

# update all node: sys_rman.conf and archive_command with sys_rman.archive-push...

# update all node: sys_rman.conf and archive_command with sys_rman.archive-push...DONE

# create stanza and check...(maybe 60+ seconds)

# create stanza and check...DONE

# initial first full backup...(maybe several minutes)

# initial first full backup...DONE

# Initial sys_rman OK.

'sys_backup.sh start' should be executed when need back-rest feature.

'sys_backup.sh start' will add CRONTAB items.

Or you can manual backup once with user-guide.

#查看备份目录,初始化过程会自动创建备份目录结构

#repo节点

$ ls /backup/rman

archive backup sys_rman.conf

#查看sys_rman.conf配置文件初始化过程会自动在备份目录中创建sys_rman.conf配置文件,并且依照sys_backup.conf文件中的设置对sys_rman.conf文件中的参数进行设置,后续sys_rman命令将使用这个文件中配置的参数

#db节点

$ ls /backup/rman

sys_rman.conf

# 查看sys_rman.conf

$ grep -v ^# /backup/rman/sys_rman.conf

[kingbase]

kb1-path=/home/kingbase/data

[global]

repo1-host=192.168.126.19

repo1-host-user=kingbase

repo1-host-config=/backup/rman/sys_rman.conf

repo1-path=/backup/rman

archive-statistics=n

log-path=/opt/Kingbase/ES/V9/Server/log

log-level-file=info

log-level-console=info

log-subprocess=y

compress-type=none

compress-level=3

band-width=0

repo-disk-warn=16384MB

repo-disk-error=1024MB

link-all=y

archive-timeout=600

archive-mode-check=n

# 查看归档参数去掉archive_command参数的注释,初始化过程中会自动为archive_command参数赋值

$ ksql -Usystem -dkingbase

kingbase=# show archive_mode;

archive_mode

--------------

always

(1 row)

kingbase=# show archive_command;

archive_command

-----------------------------------------------------------------------------------------------------------------------------------------

export TZ=Asia/Shanghai;/opt/Kingbase/ES/V9/kingbase/bin/sys_rman --config /backup/rman/sys_rman.conf --stanza=kingbase archive-push %p

(1 row)

4、检查sys_rman命令和归档配置是否正确,是否可以正常备份和归档(repo节点)

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase check

5、查看备份集,初始化过程会自动做一次全量备份(repo节点)

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

6、执行全量备份任务(repo节点)

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase --archive-copy --type full backup

7、查看备份集信息(主从db、repo节点都可以)

$ sys_rman --config /backup/rman/sys_rman.conf --stanza kingbase info

8、主备集群单节点故障恢复

参考主备节点内部备份场景

9、集群主备节点均损坏还原

集群的恢复步骤:

首先需要停止集群服务 ,然后利用sys_rman恢复主节点,再利用repmgr进行 备机还原 ,恢复备节点。

集群还原后,确认数据是否符合预期,观察应用或手动的数据操作是否同步到备节点以验证集群还原是否成功。

1.关闭原库,删除数据库文件

$ sys_monitor.sh stop

2.查看 sys_rman.conf 配置文件

##本次原机恢复到/home/kingbase/data目录,恢复目录调整请修改kb1-path=参数。

$ grep -E 'kb1-path|repo1-host' /backup/rman/sys_rman.conf

kb1-path=/home/kingbase/data

repo1-host=192.168.126.19

repo1-host-user=kingbase

repo1-host-config=/backup/rman/sys_rman.conf

3.主节点执行数据库完全恢复命令

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --delta restore

也可以--set 指定备份集完全恢复

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set="20250609-215812F" --delta restore

4.启动实例

$ sys_ctl start -D $KINGBASE_DATA

5.注册实例。

在repmgr primary register-F命令中,-F(全称为--force)的主要作用是强制覆盖已有的注册信息。

$ repmgr primary register -F

6.查看集群状态。

$ repmgr service status

7.恢复备节点

参考步骤《7、主备集群单节点故障恢复》恢复。

8.查看集群状态并验证数据是否正常

六、备份的日常管理维护

1、备份管理日常工作

作业名称

作业描述

步骤

建议执行频度

检查备份的有效性

通过日志检查是否成功备份

查看备份日志,确认备份正常完成,如遇到报错,应及时处理。

每日

备份窗口检查

检查备份作业花费的时间是否在规定备份窗口内。

检查备份日志,找出发起和结束时间,确定备份是否超过了备份的时间窗口,以免造成与其他业务冲突。

每月

备份空间检查

确认备份空间是否满足需求。

检查备份所需要的文件系统,确认其正常情况下的使用率不超过 60%。

每周

恢复测试

查看备份日志,确认备份正常完成,如遇到报错,应及时处理。

将备份恢复到备用系统,记录花费的时间。

验证恢复的数据,确认恢复的完整性,

评估数据恢复所花费时间是否满足系统容忍的停业时间。

视重要程度决定每月或每季度

2、备份优化

支持的选项包括:备份限速、并行备份、压缩备份等。

$ grep -v ^# /backup/rman/sys_rman.conf

3、定时备份

可使用crontab -e,选择业务低峰时进行备份,以减少对系统性能的影响。

$ sys_backup.sh start

4、管理和维护备份集

查看备份集

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info

指定临时保留策略:删除时只保留最近两次全量备份

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase \

--repo1-retention-full=2 expire

指定永久保留策略:删除过期的备份集并查看当前备份集

# 在sys_rman.conf中配置永久保留策略,保留最近3次全量备份

$ vi sys_rman.conf

$ cat sys_rman.conf |grep retention|grep -v grep

# 删除过期的备份集并查看当前备份集

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase expire

使用expire命令的set选项删除指定的备份集

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase \

--set='20240301-125005F' expire

5、备份初始化报错处理

初始化报错1

[kingbase@node02 bin]$ sys_backup.sh init

ERROR: Configured repo-path [/backup/rman] already exists

解决办法

[root@node02 ~]# rm -rf /backup/rman

初始化报错2

ERROR: can not connect to db at 192.168.126.16,please check /home/kingbase/data/sys_log/

解决办法

[kingbase@node02 ~]$ sys_monitor.sh start

七、总结

sys_rman是金仓 KES 数据库提供的一款专用备份与恢复工具,通过与 KES数据库紧密集成,提供了一种对数据库进行备份和恢复操作的高效方法数据库安全。无论是应对突发故障、数据误删,还是数据库迁移需求,sys_rman都能提供可靠的技术支持。掌握其使用方法,并结合最佳实践进行配置,可显著提升数据库运维的可靠性和效率,为数据安全加上“最后一道锁”。

参考资料

● 《KingbaseES备份与恢复工具手册

● 《KingbaseES物理备份恢复最佳实践

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论