引言

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

本篇博客将基于KingbaseES V9版本,深度剖析sys_dump的命令行参数、环境变量配置、错误排查等场景。

No.文章地址(点击进入)
1电科金仓KingbaseES数据库解析:国产数据库的崛起与技术创新
2KingBase数据库迁移利器:KDTS工具深度解析与实战指南
3KingBase数据库迁移利器:KDTS工具 MySQL数据迁移到KingbaseES实战
4电科金仓KingbaseES V9数据库:国产数据库的自主创新与行业实践深度解析
5KingbaseES客户端工具Ksql使用全指南:从安装到高级操作
6Spring JDBC与KingbaseES深度集成:构建高性能国产数据库应用实战
7深度解析:基于 ODBC连接 KingbaseES 数据库的完整操作与实践
8Oracle与Kingbase深度兼容体验:从连接配置到性能优化全解析
9Python驱动Ksycopg2连接和使用Kingbase:国产数据库实战指南
10Go语言×Kingbase数据库极速打通:Gokb驱动三步实操,让国产数据库连接效率嘎嘎提升!
11金仓数据库KingbaseES实现MongoDB平滑迁移全攻略:从架构适配到性能调优的完整实践
12深度解析:通过ADO.NET驱动Kdbndp高效连接与操作Kingbase数据库
13PHP驱动Pdo_kdb连接Kingbase数据库全攻略:从零到实战的深度指南
14KingbaseES数据库操作指南(1):SQL语法从入门到精通
15KingbaseES数据库操作指南(2):SQL语法从入门到精通
16KingbaseES通过KDTS实现SQLServer至KingbaseES迁移深度实战指南
17KingbaseES权限隔离深度解析:从MySQL的遗憾到安全增强的革新之路

一、sys_dump基础原理与架构设计

1.1 工具定位与工作原理

  1. sys_dump 是用于备份 KingbaseES 数据库的工具,可将数据库备份为脚本文件或其他归档文件。即使数据库正在并发使用,也能创建一致的备份。sys_dump 不阻塞其他用户访问数据库(读取或写入)。

  2. sys_dump 只备份单个数据库。要备份整个集簇,或备份集簇中所有数据库公共的全局对象(例如角色和表空间),请使用 sys_dumpall。

  3. 脚本输出是包含 SQL 命令的纯文本文件,可以使用该脚本将数据库恢复到备份时的状态,请使用 ksql 恢复数据。 即使在其他机器和其他架构上,脚本文件也可用于恢复数据库。

  4. 归档文件格式输出可与 sys_restore 配合使用来恢复数据库。允许 sys_restore 选择要恢复的内容,并且可以在恢复之前对条目重排序。归档文件格式旨在跨架构迁移。

  5. sys_dump 可用于备份整个数据库,而 sys_restore 可用于检查归档并选择要恢复数据库的哪些部分。最灵活的输出文件格式是“自定义”格式(-Fc)和“目录”格式(-Fd)。允许选择和重排序所有已归档项,支持并行恢复,并且默认是压缩的。“目录”格式是唯一支持并行转储的格式。

1.2 输出格式对比分析

格式类型扩展名恢复工具特点典型场景
纯文本.sqlksql通用性强,体积大跨数据库迁移
自定义.dumpsys_restore压缩存储,支持增量生产环境全量备份
目录格式目录sys_restore并行备份,分文件存储TB级大库备份
tar格式.tarsys_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 支持的环境变量。

四、错误避坑

  1. sys_dump 在内部执行SELECT语句。如果运行 sys_dump 时出现问题,确定能够从正在使用的数据库中选择信息,例如 ksql 。此外,libkci 前端-后端库所使用的任何默认连接设置和环境变量都将适用。

  2. 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版本恢复兼容性
V8R68.6.0完全兼容
V9R19.1.0向下兼容
V9R69.6.0支持增量

结语

通过本篇深度解析,我们系统掌握了sys_dump从基础参数到实战的完整知识体系。作为KingbaseES的核心备份工具,sys_dump不仅解决了传统备份工具的痛点,更通过并行备份、增量恢复等创新功能重新定义了数据库备份的标准。

在数字化转型加速的今天,数据已成为企业的核心资产。作为DBA,我们不仅要掌握备份工具的技术细节,更要建立完整的备份策略思维。建议读者在实战中不断总结,形成适合自身业务特点的备份方案。最好的备份永远是已经验证过的备份——定期进行恢复演练,才是保障数据安全的终极秘籍

Logo

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

更多推荐