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 TABLECREATE 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 需要 “数据库写入权限”(如 CREATEDROP 权限),建议使用 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 负责 “精准恢复”(选对象、选内容、解析脚本)。掌握这两个工具的核心在于 “理解格式差异”—— 脚本格式适合跨库迁移,归档格式适合日常备份与灵活恢复,且需在业务低峰操作、定期验证备份有效性,才能确保数据库数据的安全性与可恢复性。

posted on 2025-10-20 09:25  数据库那些事儿  阅读(58)  评论(0)    收藏  举报