KingbaseES 备份恢复工具:sys_dump 与 sys_restore
KingbaseES(金仓数据库)作为国产数据库的主流产品,在 V8R6 版本中内置了
sys_dump(备份工具)和 sys_restore(恢复工具),用于实现数据库的可靠备份与精准恢复。这两个工具支持多种备份格式,可适配不同场景(如跨库迁移、日常备份、应急恢复),且能在数据库并发使用时生成一致备份,是 KingbaseES 运维的核心工具。本文将从工具定位、命令解析、实战示例到注意事项,全面讲解其使用方法。
一、工具核心定位与基础原则
在开始实操前,需先明确两个工具的核心作用与使用前提,避免运维风险。
1. 工具定位
- sys_dump:仅针对单个数据库进行备份,将数据库内容导出为 “脚本文件” 或 “归档文件”。支持在数据库运行中备份(无需关闭服务),但会读取数据库快照,确保数据一致性。
- sys_restore:仅用于恢复
sys_dump生成的归档文件(非脚本文件),支持灵活选择恢复内容(如仅恢复数据、仅恢复表结构),是归档格式备份的专属恢复工具。 - 补充说明:若需备份 “数据库集群全局对象”(如角色、表空间),需使用
sys_dumpall工具,而非sys_dump。
2. 基础使用原则
- 业务低峰操作:尽管
sys_dump支持并发备份,但仍会占用磁盘 I/O 和数据库资源,建议在业务停止或低峰期执行,避免影响线上性能。 - 格式匹配:脚本文件(plain 格式)无需
sys_restore,可直接通过ksql导入;归档格式(custom/directory/tar)必须用sys_restore恢复,二者不可混用。 - 编码一致性:备份时指定的字符编码(如 UTF-8),恢复时需保持一致,否则可能出现乱码。
二、备份工具 sys_dump:命令解析与实战示例
sys_dump 的核心是通过参数控制 “备份范围、输出格式、数据编码”,其命令格式简洁但参数灵活,需根据场景选择合适配置。1. 核心命令格式与参数
(1)命令格式
sys_dump [连接参数...] [选项...] [数据库名]
- 连接参数:如
-U 用户名(指定登录用户)、-h 主机地址(远程连接时使用)、-p 端口(默认 54321,KingbaseES 默认端口)。 - 选项:控制备份行为的核心参数,常用选项如下表:
(2)关键选项解析
| 选项 | 简写 | 作用说明 | 适用场景 |
|---|---|---|---|
--format=format |
-F |
指定备份格式,支持 4 种类型:
p(plain):纯文本 SQL 脚本(默认)
c(custom):自定义归档(默认压缩,支持灵活恢复)
d(directory):目录归档(支持并行备份,默认压缩)
t(tar):tar 归档(不压缩,适合归档到磁带) |
日常备份选 c/d;跨库迁移选 p;磁带存储选 t |
--file=file |
-f |
指定备份文件 / 目录路径(如 -f /backup/test.dump) |
所有场景,避免备份文件散落在默认路径 |
--data-only |
-a |
仅备份数据,不备份 “模式”(表结构、索引、函数等) | 仅需恢复数据,表结构已存在的场景 |
--schema-only |
-s |
仅备份模式(数据定义),不备份数据 | 表结构迁移、环境初始化场景 |
--clean |
-c |
在备份脚本中添加 “删除旧对象” 命令(如 DROP TABLE) |
恢复时需覆盖旧数据,避免对象冲突 |
--create |
-C |
在备份脚本开头添加 “创建数据库” 命令 | 跨实例迁移,目标端无对应数据库时 |
--encoding=encoding |
-E |
指定备份文件的字符编码(如 utf-8) |
多环境编码不一致,需统一编码时 |
--column-inserts |
- | 将数据导出为 “带列名的 INSERT 语句”(如 INSERT INTO t (id,name) VALUES (...)) |
跨数据库迁移(如导入非 KingbaseES 数据库) |
--rows-per-insert=n |
- | 控制每条 INSERT 语句的行数(如 --rows-per-insert=5 表示每 5 行一条语句) |
避免单条 INSERT 语句过大,减少恢复时锁等待 |
2. 实战示例:不同场景的备份操作
根据 “备份目的” 选择不同格式与参数,以下是 4 类典型场景的实操命令与效果说明。
场景 1:日常全量备份(自定义归档格式)
需求:备份
命令:
test1 数据库,要求压缩存储、支持后续灵活恢复(如仅恢复某张表)。
# -Fc:自定义归档格式(默认压缩);-E utf-8:指定编码;-U system:使用 system 用户登录
sys_dump -Fc -E utf-8 -U system -f /home/kingbase/backup/test1_custom.dump test1
执行效果:
- 生成单个压缩归档文件
test1_custom.dump,体积小、便于传输; - 后续可通过
sys_restore选择恢复内容(如仅恢复数据、仅恢复索引)。
场景 2:大数据库并行备份(目录归档格式)
需求:备份超大规模
命令:
test1 数据库(如 100GB),需加快备份速度,支持并行处理。
# -Fd:目录归档格式(自动分文件存储,支持并行);-f 指定输出目录(需不存在)
sys_dump -Fd -E utf-8 -U system -f /home/kingbase/backup/test1_dir test1
执行效果:
- 生成
test1_dir目录,内部包含多个压缩数据文件(如5664.dat.gz)和索引文件toc.dat(记录归档内容); - 可通过
--jobs=N参数指定并行备份线程数(如--jobs=4用 4 线程备份),大幅提升大库备份效率。
场景 3:跨数据库迁移(脚本格式)
需求:将
命令:
test1 数据库迁移到非 KingbaseES 数据库(如 PostgreSQL),需导出为通用 SQL 脚本。
# -Fp:脚本格式;-c -C:含删除旧对象、创建数据库命令;--column-inserts:带列名的 INSERT
sys_dump -Fp -c -C -E utf-8 --column-inserts --rows-per-insert=5 -U system -f /home/kingbase/backup/test1_sql.sql test1
执行效果:
- 生成纯文本 SQL 文件
test1_sql.sql,内容包含 “创建数据库→删除旧表→创建表结构→插入数据” 全流程; - 数据插入语句为通用格式(如
INSERT INTO bigtable (id,name) VALUES (1,'name1'), (2,'name2')),可直接在其他 SQL 数据库中执行。
场景 4:仅备份表结构(脚本格式)
需求:为开发环境初始化
命令:
test1 数据库表结构,无需备份业务数据。
# -s:仅备份模式(表结构、索引、函数等);-Fp:脚本格式
sys_dump -Fp -s -U system -f /home/kingbase/backup/test1_schema.sql test1
执行效果:
- 脚本文件仅包含
CREATE TABLE、CREATE INDEX等结构定义语句,无任何 INSERT 数据语句,体积小、便于传输。
三、恢复工具 sys_restore:命令解析与实战示例
sys_restore 是归档格式备份的 “专属恢复工具”,支持灵活筛选恢复内容,核心优势是 “可选择性恢复”(如仅恢复某张表、仅恢复数据)。1. 核心命令格式与参数
(1)命令格式
sys_restore [连接参数...] [选项...] [归档文件/目录]
- 归档文件 / 目录:若为
custom/tar格式,指定文件路径;若为directory格式,指定目录路径。 - 关键选项:与
sys_dump部分选项功能一致,但新增 “恢复控制” 相关参数,如下表:
(2)关键选项解析
| 选项 | 简写 | 作用说明 | 适用场景 |
|---|---|---|---|
--format=format |
-F |
指定归档格式(需与备份格式一致):
c(custom)、d(directory)、t(tar) |
必须与备份格式匹配,否则无法识别 |
--dbname=dbname |
-d |
指定恢复目标数据库(需提前创建,且为 “干净数据库”) | 所有恢复场景,是核心参数 |
--clean |
-c |
恢复前先删除目标数据库中同名对象(如表、索引) | 覆盖恢复,避免 “对象已存在” 报错 |
--create |
-C |
恢复前自动创建目标数据库(无需提前建库) | 目标端无对应数据库时 |
--data-only |
-a |
仅恢复数据,不恢复表结构 | 表结构已存在,仅需补全数据 |
--schema-only |
-s |
仅恢复表结构,不恢复数据 | 重建表结构,无需业务数据 |
--list |
-l |
列出归档文件中的所有内容(如表名、索引名) | 恢复前确认归档包含的对象,避免漏恢复 |
--file=filename |
-f |
将归档内容解析为 SQL 脚本(不直接恢复到数据库) | 需修改恢复脚本后再执行(如调整表名) |
2. 实战示例:不同场景的恢复操作
恢复操作需 “先匹配备份格式,再明确恢复目标”,以下示例对应
sys_dump 的 3 类归档格式。场景 1:恢复自定义归档(custom 格式)
需求:将
前提:提前创建干净的目标数据库(用
test1_custom.dump(custom 格式)恢复到 test1 数据库,覆盖旧数据。
template0 模板,避免继承多余对象):-- 在 KingbaseES 中执行,创建空数据库
CREATE DATABASE test1 WITH TEMPLATE = template0 ENCODING = 'UTF8';
恢复命令:
# -Fc:指定 custom 格式;-c:恢复前删除旧对象;-d test1:恢复到 test1 数据库
sys_restore -Fc -c -U system -d test1 /home/kingbase/backup/test1_custom.dump
场景 2:恢复目录归档(directory 格式)
需求:将
恢复命令:
test1_dir(directory 格式)仅恢复 “数据”,不恢复表结构(表结构已提前创建)。
# -Fd:指定 directory 格式;-a:仅恢复数据;-d test1:目标数据库
sys_restore -Fd -a -U system -d test1 /home/kingbase/backup/test1_dir
场景 3:解析归档为 SQL 脚本(非直接恢复)
需求:查看
命令:
test1_custom.dump 的恢复内容,并导出为 SQL 脚本,修改后再执行恢复。
# -f:将归档解析为 SQL 脚本;不指定 -d,避免直接恢复到数据库
sys_restore -Fc -U system -f /home/kingbase/backup/restore_sql.sql /home/kingbase/backup/test1_custom.dump
执行效果:
- 生成
restore_sql.sql脚本,包含完整的恢复语句; - 可手动修改脚本(如删除某张表的恢复语句),再通过
ksql执行:ksql -U system -d test1 -f /home/kingbase/backup/restore_sql.sql
场景 4:查看归档内容(避免恢复遗漏)
需求:恢复前确认
命令:
test1_dir 归档是否包含 bigtable 表,避免漏恢复关键表。
# -l:列出归档中的所有对象,输出到控制台
sys_restore -Fd -l /home/kingbase/backup/test1_dir
输出示例:
1; 2615 16384 TABLE public bigtable system
2; 2615 16386 INDEX public bigtable_id_idx system
3; 2615 16388 SEQUENCE public bigtable_id_seq system
- 可通过关键字筛选(如
sys_restore -Fd -l /home/kingbase/backup/test1_dir | grep bigtable),快速确认目标表是否存在。
四、关键注意事项与运维建议
为确保备份恢复的可靠性,需关注以下细节,避免出现数据丢失或恢复失败。
1. 备份前准备
- 检查磁盘空间:备份前通过
df -h确认目标磁盘剩余空间,建议预留 “数据库大小 1.5 倍” 的空间(尤其是未压缩的 tar 格式)。 - 验证用户权限:
sys_dump需要 “数据库读取权限”(如SELECT权限),sys_restore需要 “数据库写入权限”(如CREATE、DROP权限),建议使用system超级用户执行,避免权限不足。
2. 备份后验证
- 归档完整性检查:对 directory 格式,确认目录下
toc.dat文件存在且非空;对 custom/tar 格式,通过sys_restore -l验证是否能正常读取内容。 - 恢复测试:定期将备份文件恢复到测试环境,验证数据完整性(如比对表行数、关键字段值),避免备份文件损坏却未发现。
3. 格式选择建议
不同备份格式适配不同场景,选择时可参考下表:
| 格式 | 压缩 | 并行备份 | 灵活恢复 | 跨库迁移 | 适用场景 |
|---|---|---|---|---|---|
| plain(脚本) | 无 | 不支持 | 不支持(需全量执行) | 支持 | 跨数据库迁移、简单环境备份 |
| custom(自定义) | 默认压缩 | 不支持 | 支持(选表、选数据) | 不支持 | 日常全量备份、应急恢复 |
| directory(目录) | 默认压缩 | 支持 | 支持 | 不支持 | 大数据库备份(10GB+)、并行恢复 |
| tar(归档) | 无 | 不支持 | 有限支持 | 不支持 | 磁带存储、简单归档备份 |
总结
sys_dump 与 sys_restore 是 KingbaseES 运维的 “黄金组合”:sys_dump 负责 “按需备份”(脚本 / 归档、全量 / 增量、数据 / 结构),sys_restore 负责 “精准恢复”(选对象、选内容、解析脚本)。掌握这两个工具的核心在于 “理解格式差异”—— 脚本格式适合跨库迁移,归档格式适合日常备份与灵活恢复,且需在业务低峰操作、定期验证备份有效性,才能确保数据库数据的安全性与可恢复性。
浙公网安备 33010602011771号