深度解析KingbaseES数据库备份利器sys_dump:从参数到实战的全流程指南
引言
在国产数据库蓬勃发展的今天,KingbaseES作为电科金仓的核心产品,其数据安全性与可靠性备受关注。作为数据库管理员,我曾遇到过许多客户因备份策略不当导致数据丢失的惨痛案例——有的因全量备份未包含增量日志导致恢复时数据缺失,有的因锁冲突导致备份进程死锁,更有甚者因格式不兼容无法完成跨版本迁移。而sys_dump正是解决这些痛点的"瑞士军刀":它不仅能生成跨平台、跨版本的通用SQL脚本,还能通过自定义格式实现灵活的增量恢复,更支持并行备份大幅提升大库备份效率。

本篇博客将基于KingbaseES V9版本,深度剖析sys_dump的命令行参数、环境变量配置、错误排查等场景。
一、sys_dump基础原理与架构设计
1.1 工具定位与工作原理
-
sys_dump 是用于备份 KingbaseES 数据库的工具,可将数据库备份为脚本文件或其他归档文件。即使数据库正在并发使用,也能创建一致的备份。sys_dump 不阻塞其他用户访问数据库(读取或写入)。
-
sys_dump 只备份单个数据库。要备份整个集簇,或备份集簇中所有数据库公共的全局对象(例如角色和表空间),请使用 sys_dumpall。
-
脚本输出是包含 SQL 命令的纯文本文件,可以使用该脚本将数据库恢复到备份时的状态,请使用 ksql 恢复数据。 即使在其他机器和其他架构上,脚本文件也可用于恢复数据库。
-
归档文件格式输出可与 sys_restore 配合使用来恢复数据库。允许 sys_restore 选择要恢复的内容,并且可以在恢复之前对条目重排序。归档文件格式旨在跨架构迁移。
-
sys_dump 可用于备份整个数据库,而 sys_restore 可用于检查归档并选择要恢复数据库的哪些部分。最灵活的输出文件格式是“自定义”格式(-Fc)和“目录”格式(-Fd)。允许选择和重排序所有已归档项,支持并行恢复,并且默认是压缩的。“目录”格式是唯一支持并行转储的格式。
1.2 输出格式对比分析
| 格式类型 | 扩展名 | 恢复工具 | 特点 | 典型场景 |
|---|---|---|---|---|
| 纯文本 | .sql | ksql | 通用性强,体积大 | 跨数据库迁移 |
| 自定义 | .dump | sys_restore | 压缩存储,支持增量 | 生产环境全量备份 |
| 目录格式 | 目录 | sys_restore | 并行备份,分文件存储 | TB级大库备份 |
| tar格式 | .tar | sys_restore | 兼容目录格式,不压缩 | 快速打包传输 |
二、命令行参数深度解析
sys_dump [ connection-option ...] [ option ...] [ dbname ]
2.1 连接参数详解
核心参数速查表
-U admin # 指定超级用户
-d sales_db # 目标数据库
-p 54321 # 默认端口
-h 192.168.1.10 # 远程主机
-W # 强制密码输入
这些参数构成基础连接框架,建议将常用连接参数写入shell别名,如:
alias kbdump="sys_dump -U system -p 54321"
2.2 输出控制参数
四种格式控制
-F c # 自定义格式(默认压缩)
-F d # 目录格式(支持并行)
-F p # 纯文本格式
-F t # tar格式
对于超过100GB的数据库,强烈推荐使用目录格式配合–jobs参数实现并行备份
输出路径管理
-f /backup/db.sql # 单文件输出
-f /backup/dir # 目录格式必须指定目录
目录格式会自动创建目录,但需确保父目录存在且权限正确
2.3 内容选择参数
结构数据二选一
-s # 仅备份结构(CREATE语句)
-a # 仅备份数据(INSERT语句)
可以采用分表备份策略,对orders表使用-a参数导出数据,对users表使用-s导出结构,实现分批次恢复。
对象过滤
-n schema1 # 仅备份指定模式
-N schema2 # 排除指定模式
-t orders # 仅备份orders表
-T logs # 排除logs表
结合正则表达式实现复杂过滤,如:
-t 'orders_*' -T 'orders_archive'
2.4 高级功能参数
并行备份黑科技
--jobs=4 # 4线程并行
主进程申请共享锁,工作者进程使用NOWAIT选项避免死锁
锁超时设置
--lock-wait-timeout=60 # 锁等待60秒超时
在OLTP系统高峰期备份时,设置合理超时时间可避免死锁导致备份进程僵死。根据业务压力测试确定,正常是30-120秒左右
三、环境变量配置
3.1 KINGBASE_DATABASE
如果被设置,就是要创建的数据库名,默认和用户名相同,除非在命令行中覆盖。
3.2 KINGBASE_HOST
指定要连接的主机名,默认连接到localhost。
3.3 KINGBASE_PORT
指定要连接的服务器的端口号,默认为54321。需要根据数据库实际部署修订。
3.4 KINGBASE_USER
指定要使用哪个用户连接数据库。默认与使用数据库的操作系统用户名相同。
3.5 PGOPTIONS
指定要使用哪些参数连接到数据库。
3.6 SYS_COLOR
指定是否在诊断消息中使用颜色。可能的值是always, auto, never 。
和大部分其他 KingbaseES 工具相似,这个工具也使用 libkci 支持的环境变量。
四、错误避坑
-
sys_dump 在内部执行SELECT语句。如果运行 sys_dump 时出现问题,确定能够从正在使用的数据库中选择信息,例如 ksql 。此外,libkci 前端-后端库所使用的任何默认连接设置和环境变量都将适用。
-
sys_dump 的数据库活动由统计收集器正常地收集。如果不想这样,可以通过KINGBASE_OPTIONS或ALTER USER命令设置参数track_counts为假。
五、经典使用场景与实战示例
1.要把一个数据库mydb转储到一个 SQL 脚本文件:
$ sys_dump mydb > db.sql
2.要把这样一个脚本重新载入到一个(新创建的)名为newdb的数据库中:
$ ksql -d newdb -f db.sql
3.要转储一个数据库到一个自定义格式归档文件:
$ sys_dump -Fc mydb > db.dump
4.要转储一个数据库到一个目录格式的归档:
$ sys_dump -Fd mydb -f dumpdir
5.要用 5 个并行的工作者进程转储一个数据库到一个目录格式的归档:
$ sys_dump -Fd mydb -j 5 -f dumpdir
6.要把一个归档文件重新载入到一个(新创建的)名为newdb的数据库:
$ sys_restore -d newdb db.dump
7.把一个归档文件重新装载到同一个数据库(该归档正是从这个数据库中转储得来)中,丢掉那个数据库中的当前内容:
$ sys_restore -d kingbase --clean --create db.dump
8.要转储一个名为mytab的表:
$ sys_dump -t mytab mydb > db.sql
9.要并行转储一个名为 mytab 的表,即:mytab表大小超过指定的大小20MB,则该表会并行转储:
$ sys_dump -t mytab mydb -Fd --min_parallel_table_size=20MB -j5 -f dumpdir
10.要以二进制方式转储一个名为mytab的表:
$ sys_dump -t mytab mydb -Fd --copy-binary -f dumpdir
11.要转储detroit模式中名称以emp开始的所有表,排除名为employee_log的表:
$ sys_dump -t 'detroit.emp*' -T detroit.employee_log mydb > db.sql
12.要转储名称以east或者west开始并且以gsm结束的所有模式,排除名称包含test的所有模式:
$ sys_dump -n 'east*gsm' -n 'west*gsm' -N '*test*' mydb > db.sql
13.同样,用正则表达式记号法来合并开关:
$ sys_dump -n '(east|west)*gsm' -N '*test*' mydb > db.sql
14.要转储除了名称以ts_开头的表之外的所有数据库对象:
$ sys_dump -T 'ts_*' mydb > db.sql
15.在-t和相关开关中指定一个大写或混合大小写的名称,需要将名称用双引号引起来,否则会被折叠为小写。并且双引号对于 shell 是特殊的,所以必须依次引用。因此,要转储一个有混合大小写名称的表,您需要类似这样的东西:
$ sys_dump -t "\"MixedCaseName\"" mydb > mytab.sql
16.设置–include-all-partitons=0 导出指定主表结构
$ sys_dump -Usystem -d db10 -p8899 -Fp -f r_p_dump.dmp -t r_p_dump --include-all-partitons=0
17.设置–include-all-partitons=1 排除主表和子表结构和数据
$ sys_dump -Usystem -d db10 -p8899 -Fp -f r_p_dump.dmp -T r_p_dump --include-all-partitons=1
六、版本兼容性统计
6.1 版本兼容矩阵
| KingbaseES版本 | sys_dump版本 | 恢复兼容性 |
|---|---|---|
| V8R6 | 8.6.0 | 完全兼容 |
| V9R1 | 9.1.0 | 向下兼容 |
| V9R6 | 9.6.0 | 支持增量 |
结语
通过本篇深度解析,我们系统掌握了sys_dump从基础参数到实战的完整知识体系。作为KingbaseES的核心备份工具,sys_dump不仅解决了传统备份工具的痛点,更通过并行备份、增量恢复等创新功能重新定义了数据库备份的标准。
在数字化转型加速的今天,数据已成为企业的核心资产。作为DBA,我们不仅要掌握备份工具的技术细节,更要建立完整的备份策略思维。建议读者在实战中不断总结,形成适合自身业务特点的备份方案。最好的备份永远是已经验证过的备份——定期进行恢复演练,才是保障数据安全的终极秘籍
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)