魔塔模拟器
127.28M · 2026-02-27
做数据库运维,最怕的不是“遇到事故”,而是事故发生时才发现:没有备份、备份不可用、恢复不会做、不知道要恢复到哪里。
这套《备份与恢复实战》系列沿用之前《ksql 指南》的文章逻辑和环境配置:Windows + ksql 为主线,辅以 KingbaseES 自带的备份恢复工具(如 sys_dump / sys_restore,以及部分版本提供的物理备份工具链),把“从备份到恢复再到验收”的闭环做成一套能直接照做的流程。
本文作为第一篇,先把你必须掌握的“备份体系”和“选型方法”讲清楚:RPO/RTO 是什么、逻辑/物理备份差异在哪、你该用哪一种、这套系列的统一演示环境怎么约定。
@[toc]
这套系列的所有操作都建立在一个前提上:你能准确掌握“版本、路径、权限”
用 ksql 执行:
SELECT version();
确认:
在 ksql 执行:
SHOW data_directory;
把输出路径记为:
KB_DATA = <SHOW data_directory 输出>比如我这里就是
KB_DATA = D:/Tools/Kingbase/ES/kes_instance_1
后面(四)(五)两篇会反复用到它。
进入你安装目录的 Serverbin(以你实际路径为准,这里我用我自己的路径做示例),然后查看帮助信息:
cd /d D:ToolsKingbaseESServerbin
sys_dump --help
sys_restore --help
ksql --help
下图是我的
这一点很关键:不同版本可能在参数细节上略有差异,以你本机 --help 输出为最终事实。后面文章所有命令都能按这个原则自证可行。
备份不是“导出一个文件”这么简单,它的最终目标只有一个:
这句话里包含 2 个运维指标(后面所有方案都绕不开):
RPO(Recovery Point Objective,恢复点目标)关注的是“数据回退的程度”。
举例:
RTO(Recovery Time Objective,恢复时间目标)关注的是“恢复需要多久”。
举例:
| 业务类型 | 典型例子 | RPO 参考 | RTO 参考 | 备份重点 |
|---|---|---|---|---|
| 测试/开发 | 测试库、个人环境 | 1 天 | 1 小时 | 备份简单、恢复能用即可 |
| 一般业务 | OA/门户/报表 | 1 小时~1 天 | 30 分钟~2 小时 | 自动化 + 演练 |
| 核心业务 | 交易/账务/生产调度 | 0~5 分钟 | 5~30 分钟 | 物理备份 + 归档日志 + 预案 |
KingbaseES 的备份恢复从“结果形态”来看,最常见的是两类:
sys_dump / sys_restore)逻辑备份的核心特点:
这套系列会用 sys_dump 讲清楚三种你最常用的逻辑备份:
sys_restore 精准恢复(只恢复某张表)物理备份的核心特点:
在 Windows 单机环境里,你至少要掌握一种“可落地”的物理备份:
sys_rman/sys_backup.sh 这类物理备份工具链(后续文章会给出“如果你的环境具备该工具链,该怎么做”的路径)| 维度 | 逻辑备份(sys_dump) | 物理备份(冷备/物理工具) |
|---|---|---|
| 典型目标 | 可迁移、可选择性恢复 | 快速恢复、灾难恢复 |
| 恢复速度 | 中~慢 | 快 |
| 恢复灵活性 | 高(可选库/表/模式) | 中(更多是整库/整实例) |
| 跨版本/跨平台 | 更友好 | 更敏感 |
| 新手上手难度 | 低 | 中~高 |
| 推荐场景 | 开发/测试、日常备份、局部救急 | 生产主库、对 RTO 要求高 |
结论(这套系列的路线):
为了让每篇文章的命令可以直接复用,这套系列统一做以下约定
ksql.exe(交互与验收)sys_dump.exe / sys_restore.exe(逻辑备份恢复)sys_ctl.exe 或服务管理(启停实例)sys_rman 等物理备份工具链(若安装包提供)备份恢复里最常见的“不可执行”,基本都能归结到两类:
最低要求:
D:KB_LAB... 有读写权限为了和之前的《ksql 指南》保持一致,这里也用最常见的本地参数写法(以实际为准):
127.0.0.1(或 localhost)54322(默认值是54321,我这里是换了)systembackup_lab在 Windows 上,建议把“备份文件、归档日志、演练目录”集中放到一个位置,避免散落:
D:\KB_LAB\backup\logical:逻辑备份文件(SQL/归档)D:\KB_LAB\backup\physical:物理备份目录(冷备副本)D:\KB_LAB\archive:归档日志目录(PITR 用)D:\KB_LAB\logs:备份脚本日志(自动化用)你可以先手动创建目录(资源管理器即可),也可以用 PowerShell 一次性创建:
New-Item -ItemType Directory -Force -Path D:KB_LABbackuplogical | Out-Null
New-Item -ItemType Directory -Force -Path D:KB_LABbackupphysical | Out-Null
New-Item -ItemType Directory -Force -Path D:KB_LABarchive | Out-Null
New-Item -ItemType Directory -Force -Path D:KB_LABlogs | Out-Null
建议按“时间 + 类型 + 实例/库名 + 格式”命名:
YYYYMMDD_HHMM_backup_lab_full.sqlYYYYMMDD_HHMM_backup_lab_full.dumpYYYYMMDD_HHMM_kes_instance_full后面每一篇都要“备份—破坏—恢复—验收”,所以必须有一套稳定的演示对象。
1)连接数据库(先连一个你能连上的库,比如默认 kingbase):
cd /d D:ToolsKingbaseESServerbin
ksql -U system -d kingbase -h 127.0.0.1 -p 54322
2)创建演示数据库 backup_lab:
CREATE DATABASE backup_lab WITH ENCODING 'UTF8';
3)切换到演示库并创建模式与表:
c backup_lab
CREATE SCHEMA backup_demo;
SET search_path TO backup_demo, public;
CREATE TABLE t_account (
id INT PRIMARY KEY,
name VARCHAR(50) NOT NULL,
balance NUMERIC(12,2) NOT NULL CHECK (balance >= 0),
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE t_order (
order_id INT PRIMARY KEY,
account_id INT NOT NULL,
amount NUMERIC(12,2) NOT NULL CHECK (amount > 0),
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_order_account FOREIGN KEY (account_id) REFERENCES t_account(id)
);
4)插入少量数据(后续会用它做校验):
INSERT INTO t_account(id, name, balance) VALUES
(1, 'A账户', 1000.00),
(2, 'B账户', 2000.00);
INSERT INTO t_order(order_id, account_id, amount) VALUES
(1001, 1, 88.00),
(1002, 2, 128.00);
后面每篇文章只要恢复完,跑下面三类校验即可(非常适合做成“验收清单”):
1)对象是否齐全:
dn
dt backup_demo.*
2)数据是否齐全:
SELECT COUNT(*) AS account_cnt FROM backup_demo.t_account;
SELECT COUNT(*) AS order_cnt FROM backup_demo.t_order;
3)关键数据是否正确(抽样 + 聚合):
SELECT id, name, balance FROM backup_demo.t_account ORDER BY id;
SELECT SUM(balance) AS total_balance FROM backup_demo.t_account;
flowchart LR
A[准备数据/对象] --> B[执行备份]
B --> C[制造事故/破坏数据]
C --> D[执行恢复]
D --> E[验收校验]
E --> F{是否通过?}
F -- 否 --> G[定位原因/重做恢复]
F -- 是 --> H[形成演练记录/纳入自动化]
本文把备份体系先“立住”:
sys_dump)更适合入门与迁移,物理备份更适合追求恢复速度下一篇开始进入真正的“可落地实操”:用 sys_dump 在 Windows 上完成库级逻辑备份,并恢复到一个全新的数据库里,最后用“验收 SQL”证明恢复成功。