KES二进制工具中物理备份与还原自动化测试脚本介绍
关键字:
KingbaseES、二进制工具、物理备份与还原、自动化测试、人大金仓、KingbaseES
KES物理备份与还原二进制工具介绍
KES物理备份还原指的是通过备份集和归档日志将数据库转化为历史状态的过程,KES通过备份磁盘中数据目录下的物理文件(数据文件、控制文件和日志文件),依靠还原数据文件和日志恢复技术来保护数据。目前只支持数据库实例整体备份,不支持单个数据库或数据表备份。目前,KES物理备份与还原工具有sys_basebackup、sys_rman和sys_bulkload数据导入导出工具。
- sys_rman
该工具集成了WAL文件归档、PITR 恢复等功能,实现了自动化定时备份以及灵活多样化的恢复,为用户提供了安全便捷的数据备份恢复解决方案。
备份类型如下表所示:
备份类型 | 介绍 | 适用场景 |
全量备份 | 针对所有需要的文件进行的一次备份。 当还原时,不需要额外的协助,通过此全量备份即可恢复数据库到备份时的状态。 | 首次备份; 长周期的定时备份; 执行恢复操作后。 |
差异备份 | 选择性备份,仅选择上一次全量备份后,发生了变化的文件,相比于全量备份节省了一定的存储空间;还原时,需要本次差异备份及其依赖的全量备份 | 短周期的定时备份 |
增量备份 | 选择性备份,仅选择上一次全量或 差异或增量备份后,发生了变化的文件,更加地节省存储空间;还原时,需要本次增量备份以及前次备份、再前次备份、直到串行依赖到一次全量备份 | 短周期的定时备份; 适用于一些大表文件。 |
块增量备份 | 选择性备份,在上一次全量或差异或增量备份后时间线未发生改变的情况下,仅选择上一次全量或差异或增量备份后,发生了变化的表文件的数据块和其他发生了变化的非表文件,比其他备份类型更加地节省存储空间;还原时,需要本次块增量备份以及前次备份、再前次备份、直到串行依赖到一次全量备份; 并且需要依赖 ktrack 插件。 | 仅更新了几条记录的情况。 |
数据恢复:
首先通过拷贝物理备份集建立起一个基础的数据库data目录全貌,然后将要恢复到的目标点写入配置文件,这两步使用sys_rman restore命令即可完成,最后启动数据库进入恢复模式,借助归档的WAL文件恢复至目标点并暂停,需要人工确认恢复是否符合预期再执行后续操作。若恢复符合预期,则执行sys_wal_replay_resume()将数据库由恢复模式转到正常运行模式,此时数据库运行在新的时间线上;若不符合预期,则需要停止数据库删掉data目录,重新确定恢复目标点再次恢复。
数据恢复方式包括指定时间点恢复与指定备份集恢复。恢复的第一个原则就是通过离目标点最近的备份集和WAL日志做恢复,这样可以减少WAL重做的数量,在一定程度上避免因WAL文件缺失导致的恢复后数据库无法正常启动的问题。指定时间恢复需要时间必须大于备份集的结束时刻。
- sys_basebackup
sys_basebackup用于获得一个正在运行的KingbaseES数据库集群的基础备份
建立数据库集群文件的一份二进制副本,获得这些备份不会影响连接到该数据库的其
他客户端,并且可以被用于时间点恢复以及用作一个日志传送或流复制后备服务器的开始点。本工具不支持UNLOGGED TABLE的数据内容的备份和还原。备份所需的所有 WAL 记录必须包含足够的全页写,这要求你在主库上启用 full_page_writes。
备份内容包括数据目录和表空间中的所有文件,包括配置文件以及由第三方放在该目录中的任何额外文件,不过由KingbaseES管理的特定临时文件除外。但只有常规文件和目录会被拷贝,但用于表空间的符号链接会被保留。指向KingbaseES已知的特定目录的符号链接被拷贝为空目录。其他符号链接和特殊设备文件会被跳过。
注:表空间默认将以普通格式备份到与它们在服务器上相同的路径中;在使用 tar 格式模式时,用户应负责在启动 KingbaseES 服务器前解压每一个 tar 文件。
- 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脚本执行过程简要说明:
清理result的日志文件, 重建表空间/tmp/tabsp, 初始化数据库, 执行data_database_object.sql给待备份的数据库创建数据result/exSql.log 执行check_data_object.sql,生成预期的检查数据文件result/expect.out |
执行备份操作 判断备份出的文件是否是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、执行测试用例、验证执行结果 |




