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

人大金仓KES二进制工具中物理备份还原自动化测试脚本介绍

原创 数据猿 2024-01-05
453


KES二进制工具中物理备份与还原自动化测试脚本介绍

关键字:

KingbaseES、二进制工具、物理备份与还原、自动化测试、人大金仓、KingbaseES

KES物理备份与还原二进制工具介绍

KES物理备份还原指的是通过备份集和归档日志将数据库转化为历史状态的过程,KES通过备份磁盘中数据目录下的物理文件(数据文件、控制文件和日志文件),依靠还原数据文件和日志恢复技术来保护数据。目前只支持数据库实例整体备份,不支持单个数据库或数据表备份。目前,KES物理备份与还原工具有sys_basebackup、sys_rman和sys_bulkload数据导入导出工具。

  1. sys_rman

该工具集成了WAL文件归档、PITR 恢复等功能,实现了自动化定时备份以及灵活多样化的恢复,为用户提供了安全便捷的数据备份恢复解决方案。

备份类型如下表所示:

备份类型

介绍

适用场景

全量备份

针对所有需要的文件进行的一次备份。 当还原时,不需要额外的协助,通过此全量备份即可恢复数据库到备份时的状态。

首次备份;

长周期的定时备份;

执行恢复操作后。

差异备份

选择性备份,仅选择上一次全量备份后,发生了变化的文件,相比于全量备份节省了一定的存储空间;还原时,需要本次差异备份及其依赖的全量备份

短周期的定时备份

增量备份

选择性备份,仅选择上一次全量或 差异或增量备份后,发生了变化的文件,更加地节省存储空间;还原时,需要本次增量备份以及前次备份、再前次备份、直到串行依赖到一次全量备份

短周期的定时备份;

适用于一些大表文件。

块增量备份

选择性备份,在上一次全量或差异或增量备份后时间线未发生改变的情况下,仅选择上一次全量或差异或增量备份后,发生了变化的表文件的数据块和其他发生了变化的非表文件,比其他备份类型更加地节省存储空间;还原时,需要本次块增量备份以及前次备份、再前次备份、直到串行依赖到一次全量备份; 并且需要依赖 ktrack 插件。

仅更新了几条记录的情况。

数据恢复:

首先通过拷贝物理备份集建立起一个基础的数据库data目录全貌,然后将要恢复到的目标点写入配置文件,这两步使用sys_rman restore命令即可完成,最后启动数据库进入恢复模式,借助归档的WAL文件恢复至目标点并暂停,需要人工确认恢复是否符合预期再执行后续操作。若恢复符合预期,则执行sys_wal_replay_resume()将数据库由恢复模式转到正常运行模式,此时数据库运行在新的时间线上;若不符合预期,则需要停止数据库删掉data目录,重新确定恢复目标点再次恢复。

数据恢复方式包括指定时间点恢复与指定备份集恢复。恢复的第一个原则就是通过离目标点最近的备份集和WAL日志做恢复,这样可以减少WAL重做的数量,在一定程度上避免因WAL文件缺失导致的恢复后数据库无法正常启动的问题。指定时间恢复需要时间必须大于备份集的结束时刻。

  1. sys_basebackup

sys_basebackup用于获得一个正在运行的KingbaseES数据库集群的基础备份

建立数据库集群文件的一份二进制副本,获得这些备份不会影响连接到该数据库的其

他客户端,并且可以被用于时间点恢复以及用作一个日志传送或流复制后备服务器的开始点。本工具不支持UNLOGGED TABLE的数据内容的备份和还原。备份所需的所有 WAL 记录必须包含足够的全页写,这要求你在主库上启用 full_page_writes。

备份内容包括数据目录和表空间中的所有文件,包括配置文件以及由第三方放在该目录中的任何额外文件,不过由KingbaseES管理的特定临时文件除外。但只有常规文件和目录会被拷贝,但用于表空间的符号链接会被保留。指向KingbaseES已知的特定目录的符号链接被拷贝为空目录。其他符号链接和特殊设备文件会被跳过。

注:表空间默认将以普通格式备份到与它们在服务器上相同的路径中;在使用 tar 格式模式时,用户应负责在启动 KingbaseES 服务器前解压每一个 tar 文件。

  1. sys_bulkload

sys_bulkload是KingbaseES提供的快速加载数据的命令行工具。用户使用sys_bulkload工具能够把一定格式的文本数据简单、快速的加载到KingbaseES数据库中,或将KingbaseES数据库中的数据快速导出到CSV文件中。支持CSV、TEXT和BINARY三种数据文件格式的导入;提供了BUFFERED方式来写入数据库文件,如果导入的目标表已建立索引,要求加载完数据后索引仍然生效。

sys_rman自动化测试工具介绍

sys_rman自动化测试工具的文件目录结构如下所示:

dump_restore.sql

expect

kbbr_repo

logs

v8r6_rman.sh

output

tabsp

template

tabsp

BinaryTools

sys_rman

BinayTools是sys_rman的上层文件夹,其中包括了config配置文件,保存了数据库的安装位置。该配置会在sys_rman中的v8r6_rman.sh中读取。

(1) sys_rman文件夹包括了:dump_restore.sql、expect 、kbbr_repo、logs、v8r6_rman.sh、output、tabsp、template。其作用如下表所示:

dump_restore.sql

用于给数据库创建数据,将被v8r6_rman.sh脚本在旧数据库做备份还原之前执行。

expect

存放了数据库中数据的预期out文件:checkRestoreFile.out

kbbr_repo

sys_rman配置文件和sys_rman备份日志记录,执行一次sys_rman任务后自动生成。

logs

包括了:

backUpRun.log:sys_rman备份过程日志;

check.log:存储检查数据库初始化、启停日志,执行dump_restore.sql文件日志和备份还原是否成功结果;

error.log;

restoreRun.log存储还原日志。

v8r6_rman.sh

sys_rman备份还原测试执行脚本。

output

存放了备份还原后的查询数据结果文件:checkRestoreFile.out

tabsp

还原的表空间存放文件夹。

template

包含了:

dump_restore.template

sql文件数据1.jpg、test.txt

查询数据验证sql文件:validate.sql

(2)该自动化脚本涉及的测试用例:

全量备份:

/bin/sys_rman --config=kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup

差异备份:

bin/sys_rman --config=kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=diff backup

增量备份:

bin/sys_rman --config=kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup

查看备份信息backupInfo:

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

还原:

bin/sys_rman --config= kbbr_repo /sys_rman.conf --stanza=kingbase restore

(3)覆盖的测试点:

全量备份

差异备份

增量备份

backupInfo

还原

(4)v8r6_rman.sh脚本执行过程简要说明:

1、清理logs文件夹下的日志

2、初始化备份还原环境,包括initdb data,启动data,修改数据库Server/bin下的sys_backup.conf文件,执行dump_restore.sql向初始化的data中添加数据。

3、执行Server/bin/sys_backup int

执行备份用例

执行还原用例

4、停止数据库,清理环境

sys_basebackup自动化测试工具介绍

sys_basebackup自动化测试工具的文件目录结构如下所示:

result

test_basebackup.sh

TestFrame

tabsp

sys_basebackup

BinaryTools

(1)BinayTools是sys_basebackup的上层文件夹,其中包括了config配置文件,保存了数据库的安装位置。该配置会在sys_basebackup中的test_basebackup.sh中读取。

sys_basebackup文件夹包括了:result文件夹、test_basebackup.sh、TestFrame文件夹。其作用如下表所示:

result

此文件夹存放备份还原的日志文件execute.log、

还原后数据验证文件back*.out、

执行sql创建数据日志exSql.log,

还原预期数据对比文件expect.out

test_basebackup.sh

执行测试脚本

TestFrame

template/check_data_object.sql 验证数据库中数据的sql文件,

template/data_database_object.sql 给数据库创建数据的sql文件,

template/ 1.jpg template/ test.txt 被data_database_object.sql使用

(2)该自动化脚本涉及的测试用例:

(-Fp)输出格式为普通文件,使用与当前数据目录和表空间相同的布局;(-X stream)在运行备份时并行开始流传输预写式日志;(-c fast)将检查点模式设置为 fast(立刻),

-T 在备份期间将目录 ``olddir`` 中的表空间重定位到 ”newdir” 中; -D 备份出的数据库data路径。

bin/sys_basebackup -U SYSTEM -p 12125 -Fp -X stream -c fast -T /tmp/tabsp=/tmp/tabsp1 -D /$db_path/back0

(-X fetch)在备份末尾收集预写式日志文件, (-c spread)将检查点模式设置spread,输出写成普通文件。

bin/sys_basebackup -U SYSTEM -p 12125 -Fp -X fetch -c spread -T /tmp/tabsp=/tmp/tabsp1 –D /$db_path/back1

在备份末尾收集预写式日志文件,(--format=t)将输出写成目标目录中的 tar文件

bin/sys_basebackup -U SYSTEM -p 12125 --format=t -X fetch -T /tmp/tabsp=/tmp/tabsp1 –D /$db_path/back2

在运行备份时并行开始流传输预写式日志,将输出写成目标目录中的 tar文件

bin/sys_basebackup -U SYSTEM -p 12125 --format=t -X stream -T /tmp/tabsp=/tmp/tabsp1 –D /$db_path/back3

在运行备份时并行开始流传输预写式日志,开始备份前创建一个由 --slot 选项指定名称的复制槽“slot_test”,如果槽已经存在则会发生错误。

bin/sys_basebackup -U SYSTEM -p 12125 -Fp -X stream -C --slot=slot_test -T /tmp/tabsp=/tmp/tabsp1 –D /$db_path/back4

在运行备份时并行开始流传输预写式日志;(--write-recovery-conf)在输出目录中(或者当使用 tar 格式时在基础归档文件中)创建 standby.signal 并附加连接设置到 kingbase.auto.conf 来简化设置一个后备服务器;kingbase.auto.conf 文件将记录连接设置(如果有)以及sys_basebackup所使用的复制槽,这样流复制后面就会使用相同的设置。

bin/sys_basebackup -U SYSTEM -p 12125 --format=t -X stream --write-recovery-conf -T /tmp/tabsp=/tmp/tabsp1 –D /$db_path/back4

(3)覆盖的测试点:

(-Fp)输出格式为普通文件

(--format=t)将输出写成目标目录中的 tar文件

(-X fetch)在备份末尾收集预写式日志文件,

(-X stream)在运行备份时并行开始流传输预写式日志

(-c fast)将检查点模式设置为 fast(立刻)

(-c spread)将检查点模式设置spread

-T 在备份期间将目录 ``olddir`` 中的表空间重定位到 ”newdir” 中

--slot 选项指定名称的复制槽“slot_test”

(--write-recovery-conf)

(4)test_basebackup.sh脚本执行过程简要说明:

  1. 初始化环境init_env:

清理result的日志文件,

重建表空间/tmp/tabsp,

初始化数据库,

执行data_database_object.sql给待备份的数据库创建数据result/exSql.log

执行check_data_object.sql,生成预期的检查数据文件result/expect.out

  1. 执行备份还原测试用例

执行备份操作

判断备份出的文件是否是tar格式,如果是需要进行解压

启动备份出的data,执行check_data_object.sql,生成result/back*.out

3、将生成的result/back*.out与result/expect.out对比,判断还原后的数据是否正确

4、停止数据库

5、清理环境

sys_bulkload自动化测试工具介绍

sys_bulkload自动化测试工具的文件目录结构如下所示:

bulkload.log

expect

initdata

logs

kingbase.conf

v8r6_bulkloadtest.sh

template

testcase

sys_bulkload

BinaryTools

(1)BinayTools是sys_bulkload的上层文件夹,其中包括了config配置文件,保存了数据库的安装位置。该配置会在sys_bulkload中的v8r6_bulkloadtest.sh中读取。

sys_bulkload文件夹包括了:result文件夹、expect文件夹、initdata文件夹、logs文件夹、v8r6_bulkloadtest.sh、testcase文件夹、template文件夹、bulkload.log、kingbase.conf。各文件作用如下表所示:

bulkload.log

暂时闲置,用不到

expect

导入、导出的数据文件预期结果存放文件夹

initdata

初始化数据的数据和sql脚本文件夹:EMPLOYEES.binary,EMPLOYEES.csv,employees_data.sql,EMPLOYEES_ON_DUPLICATE_KEEP.csv,EMPLOYEES_SKIP_LAST_EMPTY_VALUE.csv,employees.sql

logs

最近一次bulkload执行日志:bulkload.log

测试用例执行结果日志:check.log

数据库启动日志:dblog

所有测试用例执行日志:run.log

kingbase.conf

初始化data的配置文件,被v8r6_bulkloadtest.sh中调用

v8r6_bulkloadtest.sh

测试用例执行脚本

template

测试用例的配置文件原始备份,被v8r6_bulkloadtest.sh调用

testcase

v8r6_bulkloadtest.sh生成的测试用例的配置文件,并在测试过程中调用

(2)该自动化脚本涉及的测试用例:

测试用例描述及命令

命令加载的ctl配置文件

从EMPLOYEES.binary二进制格式的文件加载数据到EMPLOYEES表中。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_BINARY.ctl

LOGFILE= logs/bulkload.log

TYPE=BINARY

INPUT= initdata/EMPLOYEES.binary

OUTPUT= EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表时,指定加载时是否进行约束检查(只检查check约束),其中employees表存在check约束department_id<60,EMPLOYEES.binary存在违反约束数据。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_CHECK_CONSTRAINTS.ctl

CHECK_CONSTRAINTS=YES

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_default.ctl

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,指定输入数据的编码格式为UTF8,检查指定的编码格式是否合法。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_ENCODING.ctl

ENCODING=UTF8

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,FORCE_NOT_NULL强制要求指定的列不为NULL值,默认情况下将空字符串按照NULL值处理,如果指定了该值,则空字符串不再按照NULL值处理,而是按照零长字符串处理。

EMPLOYEES.csv中last_name属性存在空值数据

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_FORCE_NOT_NULL.ctl

FORCE_NOT_NULL=last_name

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,设置LIMIT参数为导入文件的行数。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_LIMIT.ctl

LIMIT=3

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,NULL表示将指定字符串替换为NULL,

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_NULL.ctl

NULL=yang

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES_ON_DUPLICATE_KEEP.csv加载数据到EMPLOYEES表,DUPLICATE_ERRORS表示允许违反唯一约束的忽略的元组个数,ON_DUPLICATE_KEEP表示违反唯一约束的处理方式为保留旧数据。

EMPLOYEES_ON_DUPLICATE_KEEP.csv存在违反唯一约束数据。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_ON_DUPLICATE_KEEP.ctl

ON_DUPLICATE_KEEP=OLD

DUPLICATE_ERRORS=2

WRITER=DIRECT

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES_ON_DUPLICATE_KEEP.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表, PROCESSOR_COUNT指定服务器并行处理的进程数,TYPE为BIANRY方式不支持该参数。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_PROCESSOR_COUNT.ctl

PROCESSOR_COUNT=4 DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,REINDEX建立索引

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_REINDEX.ctl

REINDEX=YES

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,SKIP在导入TEXT和CSV格式的数据文件时,设置跳过多少行数据,这些数据不导入数据库。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_SKIP.ctl

SKIP=3

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES_SKIP_LAST_EMPTY_VALU E.csv加载数据到EMPLOYEES表,SKIP_LAST_EMPTY_VALUE只对CSV格式有用,最后一列数据为空,是否把它当成一列数据,还是只是当分隔符,指定该选项为YES,忽略最后一个分隔符。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_SKIP_LAST_EMPTY_VALUE.ctl

SKIP_LAST_EMPTY_VALUE=YES

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES_SKIP_LAST_EMPTY_VALUE.csv

OUTPUT=EMPLOYEES

从EMPLOYEES.csv加载数据到EMPLOYEES表,TRUNCATE表示删除所有目标表中的数据。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/input_TRUNCATE.ctl

TRUNCATE=YES

DELIMITER=","

TYPE=CSV

INPUT = initdata/EMPLOYEES.csv

OUTPUT=EMPLOYEES

从EMPLOYEES表中导出数据到output_default.csv。TYPE加载的数据源的类型,值为DB时表示从数据库的表中导出数据。

bin/sys_bulkload -Usystem -p54316 -dtest testcase/output_default.ctl

TYPE=DB

INPUT=EMPLOYEES

OUTPUT= result/output_default.csv

WRITER=CSV_FILE

从EMPLOYEES表中导出数据到output_PROCESSOR_COUNT.csv,指定服务器并行处理的进程数为32

bin/sys_bulkload -Usystem -p54316 -dtest testcase/output_PROCESSOR_COUNT.ctl

PROCESSOR_COUNT=32

TYPE=DB

INPUT=EMPLOYEES

OUTPUT=result/output_PROCESSOR_COUNT.csv

WRITER=CSV_FILE

(3)覆盖的测试点:

TYPE=BINARY从二进制格式的文件加载数据到表

CHECK_CONSTRAINTS=YES指定加载时是否进行约束检查(只检查check约束)

TYPE=CSV从csv文件加载数据到数据库表

ENCODING=UTF8检查指定的编码格式是否合法

FORCE_NOT_NULL强制要求指定的列不为NULL值,转化空值为特殊字符

LIMIT参数导入文件的行数

NULL属性,将指定字符串替换为NULL

DUPLICATE_ERRORS允许违反唯一约束的忽略的元组个数,ON_DUPLICATE_KEEP违反唯一约束的处理方式为保留旧数据。

PROCESSOR_COUNT指定服务器并行处理的进程数

REINDEX建立索引

SKIP设置导入数据跳过多少行数据

TRUNCATE删除所有目标表中的数据。

TYPE=DB 从数据库表中导出数据到csv文件

PROCESSOR_COUNT指定导出数据时,服务器并行处理的进程数

(4)v8r6_bulkloadtest.sh脚本执行过程简要说明:

1、清理日志文件夹logs

2、初始化环境initEnv,初始化数据库,创建扩展sys_bulkload

3、执行测试用例、验证执行结果

参考资料

KingbaseES客户端应用参考手册

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

评论