关键字

KingbaseES、备份还原、物理备份、人大金仓

概述

计算机系统不可避免地会发生内部故障、系统故障、硬件故障等问题,这些问题会造成数据库中的事务非正常停止,或部分数据丢失,因此数据库管理系统必须具有把数据库从错误状态恢复到某一已知的正确状态(亦称为一致状态或完整状态)的功能,这就是数据库的备份与恢复。

KingbaseES 提供的备份恢复方式可以分为两种:一种是基于日志的物理备份恢复,另一种基于SQL语句的逻辑备份还原。物理备份恢复和逻辑备份还原都是各自采用了不同的技术手段来达到保护数据的目的。基于日志的物理备份恢复和基于SQL语句的逻辑备份还原各有特点,适用于不同的场合,没有直接的好坏之分。。

备份还原的方式

物理备份还原

物理备份还原指的是通过备份集和归档日志将数据库转化为历史状态的过程,KingbaseES通过备份磁盘中数据目录下的物理文件(数据文件、控制文件和日志文件),依靠还原数据文件和日志恢复技术来保护数据,sys_rman工具属于物理备份还原。

逻辑备份还原

逻辑备份还原指的是利用备份的数据库对象把数据库从一个快照转化到另一个快照的过程(数据库在某个时刻的一个状态称为一个快照)。KingbaseES提供数据库对象的联机逻辑备份还原功能,备份对象包括:数据库、模式、表、视图、约束、权限、触发器、函数、序列。

KingbaseES提供相关命令完成逻辑备份与还原功能。

逻辑备份主要支持导出整个实例、指定库、指定模式、指定表等几种导出的方式,借助sys_dumpall可以导出整个实例或角色表空间等定义和数据,借助sys_dump可以导出指定数据库的所有对象定义和内容,也可以导出指定模式或指定表的对象定义和内容。

物理备份还原实战

物理备份还原概述

物理备份主要通过物理备份工具(sys_rman)实现,该工具具备如下特性

  • 工具备份的对象,既可以是数据库单机实例,也可以是数据库集群
  • 工具初始配置时、备份时,数据库服务必须处于运行状态、读写功能正常、集群各节点在线
  • 工具的初始配置、备份,必须在REPO仓库节点上执行
  • 工具的还原,必须在DB数据库节点上执行
  • 工具在默认的归档模式always时,cluster模式下的各个节点都会做归档,工具自动选择最快节点推送的归档
  • 工具也支持single/cluster模式时,归档模式设为on

备份架构

单机+外部备份

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

../../../_images/sys_rman-image1.png

单机+内部备份

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

一主一备+外部备份

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

一主一备+内部备份

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

sys_rman工具的构成

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

sys_backup.sh命令格式说明:

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

参数说明:

init:初始化备份还原功能,该命令依赖于数据库实例已经正常工作,请勿在数据库业务繁忙时执行,业务繁忙时,可能会由于归档没落盘,或其他条件检查导致初始化失败

start:启动CRONTAB任务来完成备份功能

stop:停止CRONTAB任务来完成备份功能

pause:暂时停止备份功能

unpause:恢复被暂停的备份功能

sys_rman初始化

一、准备初始化文件

sys_backup.conf,初始化配置文件,供操作人员修改的配置文件;

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

工具按照如下顺序寻找初始化配置文件:(1)./kingbase/bin/sys_backup.conf(2)./kingbase/share/sys_backup.conf

KingbaseES的安装目录 ./kingbase/share 目录下有初始配置文件的模板

二、初始化流程

  1. 配置文件参数有效性检查
  2. 检数据库实例的未归档WAL的数量
  3. 配置REPO节点的运行时配置文件sys_rman.conf
  4. 配置各DB节点的运行时配置文件sys_rman.conf
  5. 修改各DB节点的archive_command配置,reload数据库实例
  6. 创建备份stanza,执行第一次全量备份
  7. 不同场景初始化
  • 在单机+外部备份场景下

确保kingbase.conf中以下两项配置:

archive_mode=always 也支持设置为on

archive_command 没有被注释,内容将被脚本自动修改

确保sys_backup.conf中以下配置:

#file: sys_backup.conf

# target db style enum: single/cluster/single-pro

_target_db_style="single"

_one_db_ip="192.168.28.37" # 数据节点IP

_repo_ip="192.168.28.46" # 备份服务器IP

# !!! these follow 4 parameter ONLY for single style

# data dir of single

_single_data_dir="/home/kingbase/ES/single/data"

# bin dir of single

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

# database user of single

_single_db_user="system"

# database port of single

_single_db_port="54321"

  • 在单机+内部备份场景下

确保kingbase.conf中以下两项配置:

archive_mode=always 也支持设置为on

archive_command 没有被注释,内容将被脚本自动修改

确保sys_backup.conf中以下配置:

#file: sys_backup.conf

# target db style enum: single/cluster/single-pro

_target_db_style="single"

_one_db_ip="192.168.28.37" # IP地址相同

_repo_ip="192.168.28.37" # IP地址相同

# !!! these follow 4 parameter ONLY for single style

# data dir of single

_single_data_dir="/home/kingbase/ES/single/data"

# bin dir of single

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

# database user of single

_single_db_user="system"

# database port of single

_single_db_port="54321"

  • 在集群中每个节点单独备份

每个DB节点都是独立的REPO节点。

单独备份需要数据库实例的archvie_mode为always;

初始化脚本将检测此配置,如果需要,脚本将提示用户后进行设置并重启数据库实例。

确保es_rep.conf中以下两项配置:

archive_mode=always

archive_command 没有被注释,内容将被脚本自动修改

#file: sys_backup.conf

# target db style enum: single/cluster/single-pro

_target_db_style="single-pro"

_one_db_ip="10.10.11.11" # 本节点IP

_repo_ip="10.10.11.11" # 本节点IP

  • 在一主一备+外部备份场景下

确保es_rep.conf中以下两项配置:

archive_mode=always 也支持设置为on

archive_command 没有被注释,内容将被脚本自动修改

#file: sys_backup.conf

# target db style enum: single/cluster/single-pro

_target_db_style="cluster"

  • 在一主一备+内部备份场景下

确保es_repo.conf中以下两项配置:

archive_mode=always 也支持设置为on

archive_command 没有被注释,内容将被脚本自动修改

#file: sys_backup.conf

# target db style enum: single/cluster/single-pro

_target_db_style="cluster"

备份任务的启停

启动(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。

在初始化配置文件中,_continue_incr=y,将全量备份的定时任务使用带合并参数的增量备份,获得一个全量备份集。

在多REPO场景中,REPO均为外部节点时,一次执行多个节点同时启停定时任务;如果DB节点兼任REPO,每个REPO需要独立设置定时任务。

停止(sys_backup.sh stop)

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

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

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

在多REPO场景中,REPO均为外部节点时,一次执行多个节点同时启停定时任务;如果DB节点兼任REPO,每个REPO需要独立设置定时任务。

暂停(sys_backup.sh pause)

暂时停止定时备份动作,恢复使用sys_backup.sh pause

备份还原与恢复

还原

  • 还原操作说明:
    • 还原动作,只能在数据库节点上进行。

还原完成后,数据库启动后,请及时手动清除kingbase.auto.conf文件中还原过程写入的相关还原参数。

    • 若是集群环境,还原后的数据库节点将成为集群的新主节点,利用该节点重做备库,参考 《 金仓数据守护集群和读写分离集群使用手册 》;集群完整启动后,可选择新的主节点。
    • 还原时,需要确保kingbase进程已经停止。
    • 还原时,KB_DATA目录下如果还有文件存在,需要--delta选项进行选择性还原。
    • 还原时,KB_DATA目录下如果没有文件存在,以下的还原方式均可使用。
    • 还原时,如果不指定--repo,将遍历所有REPO;如果指定--repo,将在指定REPO读取备份集信息。
  • 还原方式:
    • 基于最新备份的还原,默认还原,将最新的备份集还原到数据库实例的data目录下。
    • 指定备份集还原 ,不指定时间,工具将隐式地指定时间为备份集结束时间的后一秒。指定时间,工具将验证指定时间是否晚于备份集结束时间。
    • 指定事务ID还原 ,使用指定的xid还原到特定状态,必须同时指定该xid之前的备份集,才能够恢复到该xid。
    • 指定时间点还原,使用指定的时间点还原到特定状态。

恢复

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

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

restore_command

配置为sys_rman工具archive-get命令,负责拉取归档的WAL日志,拉取的范围由后续参数确定。

如果没有recover_target_*相关选项,将自动拉取所有的归档WAL文件并执行REDO动作,将数据还原到最新的状态。

recovery_target_time

还原使用PITR功能--type=time时,填充相关值。

recovery_target_xid

还原使用PITR功能--type=xid时,填充相关值。

recovery_target_timeline

还原使用功能--target-timeline时,填充相关值。

recovery_target_action

还原使用功能--target-action时,填充相关值。

参考资料

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

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐