关键字:
安全;逻辑备份与压缩;sys_dump;sys_restore、人大金仓、KingbaseES
概述
一.工具介绍
1. sys_dump
可以把 KingbaseES 数据库抽取为一个脚本文件或其他归档文件
sys_dump 是一种用于备份 KingbaseES 数据库的工具。即使数据库正在并发使用,它也能创建一致的备份。不过从实际情况考虑,在业务停止时在再做数据导出工作更好一些,可以米念对业务性能产生影响。
转储以脚本或归档文件格式输出。脚本转储是包含 SQL 命令的纯文本文件,可以使用该脚本文将数据库恢复到转储时的状态。要从这样的脚本恢复数据库,请将其提供给 ksql 。 即使在其他机器和其他架构上,脚本文件也可用于恢复数据库;在经过一些修改后,甚至可以在其他 SQL 数据库产品上恢复数据库。
另一种可选的归档文件格式,须与 sys_restore 配合使用来恢复数据库。它们允许 sys_restore 选择要恢复的内容,甚至可以在恢复之前对条目重排序。归档文件格式旨在跨架构迁移。
当一种归档文件格式与 sys_restore 结合使用时,sys_dump 提供了一种灵活的归档和传输机制。sys_dump 可用于备份整个数据库,而 sys_restore 可用于检查归档并/或选择要恢复数据库的哪些部分。最灵活的输出文件格式是“自定义”格式( -Fc )和“目录”格式( -Fd )。它们允许选择和重排序所有已归档项,支持并行恢复,并且默认是压缩的。“目录”格式是唯一支持并行转储的格式。
当运行 sys_dump 时,请检查输出是否有任何警告(打印在标准错误上)。
2. sys_restore
可以把一个由 sys_dump 创建的归档文件恢复一个 KingbaseES 数据库。
sys_restore 是一个用来从 sys_dump 创建的非文本格式归档恢复 KingbaseES 数据库的工具。它将发出必要的命令把该数据库重建成它被保存时的状态。这些归档文件还允许 sys_restore 选择恢复哪些内容或者在恢复前对恢复项重排序。这些归档文件被设计为可以在不同的架构之间迁移。
sys_restore 可以在两种模式下操作。如果指定了一个数据库名称,sys_restore 会连接那个数据库并且把归档内容直接恢复到该数据库中。否则,会创建一个脚本,其中包含着重建该数据库所必要的 SQL 命令,它会被写入到一个文件或者标准输出。这个脚本输出等效于 sys_dump 的纯文本输出格式。因此,一些控制输出的选项与 sys_dump 的选项类似。
显然,sys_restore 无法恢复不在归档文件中的信息。例如,如果归档使用“以 INSERT 命令转储数据”选项创建, sys_restore 将无法使用 COPY 语句装载数据。
特性实际操作
本案例使用数据库版本: Select version(); 1. sys_dump命令格式 本工具只能转储单个数据库,如果想备份一个集群,或者是集群中对所有数据库的公共全局对象,应使用sys_dumpall。 sys_dump [ connection-option ...] [ option ...] [ dbname ] 常用参数:(更具体的讲解和更全的参数参考KES客户端应用参考手册) dbname:指定要被转储的数据库名。 -a --data-only :只转储数据,而不转储模式(数据定义)。 -c --clean:在输出创建数据库对象的命令之前输出一个删除它们的命令,只对纯文本格式有意义,归档格式如果想实现此功能,可以在sys_restore时指定。 -C --create :输出的开始是一个创建数据库本身并且重新连接到被创建的数据库的命令。 -E encoding:以指定的字符集编码创建转储 -f file:将输出发送到指定文件 -F format 选择输出的格式,格式可以是: p plain 输出一个纯文本形式的SQL脚本文件(默认值) c custom 输出一个适合于作为sys_restore输入的自定义格式归档。 d directory 输出一个适合作为sys_restore输入的目录格式归档 t tar 输出一个适合于输入到sys_restore输入的tar-格式归档 -s --schema-only : 只转储对象定义(模式),而非数据。 -K key :加密 -Z 0..9:压缩,后面数字为压缩级别,0为不压缩。 -t pattern:只转储名字匹配‘pattern’的表。 -T pattern:不转储匹配“pattern”模式的任何表。 --inserts :将数据转储为带有显式列名的insert命令。 --rows-per-insert=nrows :使用 INSERT 命令转储数据(而非 COPY )。 控制 INSERT 每行的最大行数。 2. sys_dump示例 sys_dump导出可以被输出到脚本或归档文件格式两种格式。 脚本格式 例:开启服务,进入数据库。 CREATE DATABASE test1; \q ./ksql -U system -p 51211 -W test1 ./sys_dump -d test1 -U system -p51211 -Fp -f/home/kingbase/test11/dumptest/dump1.out -- 导出数据库test1的全部数据,用户名system,端口为51211 输出文件名为dump1.out到指定目录下,输出格式为明文。 可以回到路径后查看 导出的脚本格式,可以使用ksql进行数据导入恢复,命令如下: ./ksql -f /home/kingbase/test11/dumptest/dump1.out -Usystem -p 51211 -d test1 ./sys_dump -Fp -Cc -E utf-8 --column-inserts --inserts --rows-per-insert=5 test1 -f /home/kingbase/test11/dumptest/dumpFpCcEinserts.out -Usystem -p51211 也可以加些参数,如上述语句,可以让导出格式为sql的insert格式,非数据库的copy格式,并且制定每次insert的提交数据条数 归档文件格式: 归档文件格式必须与sys_restore配合使用来重建数据库。 这里列举下Fc和Fd两种不同方式(Fc 自定义归档方式 Fd 文档归档方式)。 ./sys_dump -Fc -E utf-8 test1 -f /home/kingbase/test11/dumptest/dumpFd -Usystem -p 51211 ./sys_dump -Fd -E utf-8 test1 -f /home/kingbase/test11/dumptest/dumpFD -Usystem -p51211 之后我们从目录查看,可以看到Fc方式输出,最后是一个.out文件。 Fd方式输出,是一个隐藏文件夹,打开之后有.dat.gz文件和toc.dat文件。 并且归档文件格式也和脚本格式一样,可以加上其他参数。 由于在做一个有关加密和压缩的特性需求,所以用这两个参数为例子。 --加密且压缩,目前版本暂不支持 ./sys_dump -d test1 -U system -p 51211 -F c -K 123456 -Z 1 -f dump.dmp --只加密 密钥为123456 ./sys_dump -d test1 -U system -p 51211 -F c -K 123456 -f dump.dmp --只压缩 压缩等级为1 ./sys_dump -d test1 -U system -p 51211 -F c -Z 1 -f dump1.dmp 归档格式一般采用sys_restore进行恢复,所以不再举例子,之后会对sys_restore进行简单实践。
sys_restore [ connection-option ...] [ option ...] [ filename ] 常用参数:()更具体的讲解和更全的参数参考KES客户端应用参考手册) filename : 指定要回恢复的归档文件的位置。(目录格式的归档则是目录的位置) -a --data-only:只恢复数据,不恢复模式(数据定义)。 -c --clean:在重新创建数据库对象之前删除它们。 -C --create:在恢复一个数据库之前先创建它。 -d dbname --dbname=dbname:连接到数据库 ``dbname`` 并且直接恢复到该数据库中。 -f filename --file=filename:为生成的脚本或列表(当使用 -l 时)指定输出文件。 为 stdout 则使用中划线 - 。 -F format --format=format 指定归档的格式。并不一定要指定该格式,因为 sys_restore 将会自动决定格式。如果指定,可以是下列之一: c custom : 归档采用 sys_dump 的自定义格式。 d directory : 归档是一个目录归档。 t tar归档是 : 一个 tar 归档。 -I index --index=index:只恢复命名索引的定义。可以通过写多个 -I 开关指定多个索引。 -l --list :列出归档的内容的表格 --view-only :只恢复视图。 -s --schema-only: 只恢复归档中的模式(数据定义),不恢复数据。 2. sys_restore示例: ./sys_restore -Fc /home/kingbase/test11/dumptest/dumpFd -Usystem -d test1 -p 51211 恢复自定义归档格式的备份 图中恢复完成,出现了一个错误,关系表te1已经存在,由于数据库没有清空,在恢复时就会出现此问题。 可以清空test1,或者重新创建干净的数据库,都可以解决此问题。 ./sys_restore -Fd /home/kingbase/test11/dumptest/dumpFD -Usystem -p51211 -d test1 也同理,Fd目录格式归档的备份,在干净的数据库上可以恢复之前备份的test1数据库的全部数据, 除了恢复之外,还有一个导出到log文件的功能。 -- 将Fc归档格式的数据库备份文件导出到dumpFc.log中,并解析为sql文本格式 ./sys_restore -Fc /home/kingbase/test11/dumptest/dumpFd -Usystem -Cc -f /home/kingbase/test11/dumpFc.log -- 将Fd归档格式的数据库备份文件导出到dumpFd.log中,并解析为sql文本格式 ./sys_restore -Fd /home/kingbase/test11/dumptest/dumpFD -Usystem -f /home/kingbase/test11/dumpFd.log |
使用经验及注意事项
- 目前导出工具的加密功能只支持输出格式为custom的场景(-F c)。
- 在自定义归档格式下(-F c),如果不加-Z,导出的文件已经是压缩状态了,-Z的意义在于可以自由指定压缩等级,同时还能指定-Z 0以指定不压缩。
- 加密设置密钥时,长度应满足小于16字节,同时只能输出为二进制形式。
- 目前加密和压缩可以单独使用,但不可以同时使用。
其他方面总结:
- 作为二进制工具,sys_dump和sys_restore都是在bin目录下直接使用./使用即可。
- 简单上来说就是一个备份数据库的工具,一个还原数据库的工具,使用时按照手册和需求注意下参数即可。需要注意不同类型的区别,和他们还原的方式,比如脚本类型就可以使用ksql进行还原,归档类型需要sys_restore进行恢复。
- 在还原时,数据库需要是干净的,可以考虑CREATE一个新的数据库,或者使用CREATE DATABASE test1 template template0来重新创建一个干净的数据库。
- 参数方面列举的比较少,有些参数之间会有冲突现象,比如提到的-K加密和-Z压缩。需要通过KES客户端应用参考手册中的相关参数进行进一步的学习和实践。
- 在编写测试方案的时候,需要考虑添加或者修改参数时,语法方面的问题,还有和其他参数的组合语法问题,原有功能,文档描述等。同时应考虑不同类型数据,不同用户,不同对象模式,错误场景,新旧版本等。
- 考虑工具时,GUI工具 KStudio比较常见,和特性相关工具最好能详细描述一下用法。
- 考虑同期特性是否有冲突,一般会待集成阶段验证。
价值评价
可以进行数据库的备份
参考资料
《KingbaseES 安全指南》