处理kingbase备份与恢复实战(六)—— 备份自动化与保留策略:Windows任务计划+日志追溯这类问题时,先确认目标场景,再按步骤核对配置或玩法细节。
许多团队无法达成备份,问题并不出在 sys_dump 自身,而是因为“流程未落实”,常见的状况你很可能已经目睹过。
备份全靠手工,忙的时候忘了
备份做了,但没人知道有没有成功
备份文件越堆越多,占满磁盘
真出事了才发现:最近一次可用备份是半年前
所以从运维视角看,备份要真正可用,至少得把下面 4 件事补齐:
定时执行(自动化)
成功/失败可感知(日志 + 返回码)
保留策略(留存周期 + 清理)
恢复演练(验证备份可用)
在 Windows 环境当中,利用前面几篇所掌握的命令,把一套“可追溯”的自动备份方案落实下来,也就是依靠 Windows 任务计划,统一目录,统一命名,日志留存以及保留策略,这样做,起码能够先稳固住“每天有人管理,出了事情可以查询,磁盘不会爆炸”这两件事。
@[toc]
先把目录和命名统一起来,后面自动化才好做、也好排障。建议沿用本系列的统一路径:
D:KB_LABbackuplogical:逻辑备份输出目录D:KB_LABlogs:备份脚本日志目录创建目录:
New-Item -ItemType Directory -Force -Path D:KB_LABbackuplogical | Out-NullNew-Item -ItemType Directory -Force -Path D:KB_LABlogs | Out-Null命名建议最好写得“能直接复制
YYYYMMDD_HHMM_backup_lab_full.dumpYYYYMMDD_HHMM_backup_lab_full.log在 Windows 上做数据库备份自动化,最容易被忽略的真不是命令怎么写,而是“谁在跑、有没有权限”
至少要满足:
D:KB_LABbackuplogical 与 D:KB_LABlogs 具备读写权限sys_dump.exe(要么配置 PATH,要么使用绝对路径)别赌任务计划里的环境变量会不会和你手工打开的 cmd 一样。最稳妥的做法就是:
D:ToolsKingbaseESServerbinsys_dump.exe这样就算机器重启、换人维护,任务也更容易持续跑通。
这套系列以“单机/中小规模”场景的常见诉求,给你一个可落地的基线策略:
每天 1 次全库逻辑备份(custom 格式,便于精准恢复)
保留 7~14 天(按磁盘与合规要求调整)
每周至少做一次“恢复验收”(可以恢复到新库做校验)
如果你同时做了物理冷备(上一篇),可以扩展为:
每周 1 次物理冷备(停机窗口内执行)
每天 1 次逻辑备份(不停机)
建议准备 3 个脚本文件(命名你按团队规范调整就行):
kb_backup_logical_full.bat - 作用:执行 sys_dump 全库备份(custom 格式)。
关键命令:sys_dump -F c -f <dump_file> backup_lab
关键要求:输出返回码、把标准输出/错误输出写入日志文件
kb_backup_retention.ps1
关键命令为:按照 LastWriteTime 删除超出 N 天的 *.dump / *.log 文件。
kb_backup_verify.sql 用于恢复之后的验收,其中包含对象,行数以及关键聚合信息。
dt、COUNT(*)、关键表聚合校验1)打开【控制面板】,搜索 “计划任务”,点击
2)选择【创建任务】(不要选“创建基本任务”,可配置项更少)
KingbaseES_LogicalBackup_Daily为了让文章更贴近生产,文章里明确一组“统一变量”:
D:ToolsKingbaseESServerbinD:KB_LABbackuplogicalD:KB_LABlogs-h 127.0.0.1 -p 54321 -U systembackup_lab01:00你有两种常见选择:
cmd.exe/c D:KB_LABscriptskb_backup_logical_full.batD:ToolsKingbaseESServerbin(可选,但建议指定)起始于为什么重要
如果你希望不依赖脚本文件,也可以直接在“添加参数”里写完整命令(但不利于维护)。
示例逻辑(用 custom 格式输出):
D:ToolsKingbaseESServerbinsys_dump.exe -h 127.0.0.1 -p 54321 -U system -F c -E UTF8 -f D:KB_LABbackuplogical20260207_0100_backup_lab_full.dump backup_lab只要你做过一次生产事故复盘就会明白:没有日志,自动化就很难交付——出了问题没证据、也不好定位。
推荐你在任务计划里把参数写成“带日志”的形式(示例):
/c D:ToolsKingbaseESServerbinsys_dump.exe -h 127.0.0.1 -p 54321 -U system -F c -E UTF8 -f D:KB_LABbackuplogical20260207_0100_backup_lab_full.dump backup_lab 1>> D:KB_LABlogs20260207_0100_backup_lab_full.log 2>>&1这样每次执行都会把标准输出和错误输出都写进日志里,哪怕失败了,也能顺着日志把原因找出来。
建议配置(偏运维实践):
创建完任务后,右键任务【运行】,然后检查:
D:KB_LABbackuplogical 是否生成新的备份文件
D:KB_LABlogs 是否生成对应日志
任务计划“上次运行结果”是否为成功(0x0)
“验证闭环”,怎么确认“真的备到了、而且可用”:
日志里是否出现明显报错(连接失败、权限不足、磁盘满)
备份文件大小是否合理(不为 0、与历史量级接近)
如果是 custom 归档格式,它能否被 sys_restore -l 正常列出以满足快速可用性验收的要求?
保留策略其实就回答两个问题:
思路很简单:
*.dump 与 *.logPowerShell 的关键命令逻辑
$keepDays = 14$deadline = (Get-Date).AddDays(-$keepDays)Get-ChildItem D:KB_LABbackuplogical -Filter *.dump | Where-Object { $_.LastWriteTime -lt $deadline } | Remove-Item -ForceGet-ChildItem D:KB_LABlogs -Filter *.log | Where-Object { $_.LastWriteTime -lt $deadline } | Remove-Item -Force你可以把它单独做成第二个任务每天跑一次,也可以在备份任务后面追加执行(看你们习惯哪种维护方式)。
一些失败的备份可能会留下:
判定思路:
如果合规要求更高,建议额外保留:
实现方式很多,这里给个思路就够用:
D:KB_LABbackuplogicalmonthlyYYYYMMmonthly 目录使用更长留存周期自动化备份跑起来以后,最容易被忽略的一件事反而是:这份备份到底可不可靠。
建议每周至少做一次恢复验收(最好恢复到新库,隔离验证更安全):
1)创建目标库:
DROP DATABASE IF EXISTS backup_lab_verify;CREATE DATABASE backup_lab_verify WITH TEMPLATE = template0 ENCODING ='UTF8';2)用 sys_restore 恢复(如果你的备份是 custom 格式):
sys_restore -h 127.0.0.1 -p 54321 -U system -d backup_lab_verify D:KB_LABbackuplogical<latest>.dump3)执行验收 SQL(kb_backup_verify.sql)并留存结果(截图/日志)。
在运维实践里> 备份失败必须被看见(至少进事件查看器/监控系统),否则自动化等于形式化。
最简做法(不依赖额外组件):
任务计划配置“失败时重试”
定期人工抽查:看“上次运行结果”与日志末尾
更标准的做法(按你单位监控体系选用):
把日志采集到集中日志平台
失败关键字触发告警(例如包含 ERROR/FATAL/permission denied)
本文把“备份从手工活变成可交付能力”落到了 Windows 可执行层面:
用任务计划把 sys_dump 固化为每天自动执行
用统一目录与命名让文件可追溯
用日志与任务返回码让成功/失败可感知
用保留策略避免磁盘被备份占满
用按阶段复原验收来确保备份切实可用,这篇文作为系列的结尾部分,我们将此套方案向前推进一步,形成成“演习剧本+事故处理列表+常见故障检查”这样的形式,这样你就能直接执行一次全面的复原演习。