备份这件事,KingbaseES 的 DBA 圈子里讨论热度一直不低。今天专门把并行处理、IO 限速、永久增量备份这三个关键词放在一起,结合我实际运维中的操作记录和踩坑经历,写一篇可以直接照着做的实战指南。无论你是刚接手金仓库的新手,还是已经在生产环境摸爬滚打过的老手,只要还在为备份窗口太长、备份时业务抖动、磁盘空间越吃越紧而头疼,这篇内容都值得你花十分钟读完。
先说结论:KingbaseES 的备份远不止一条sys_backup.sh命令那么简单。并行度怎么配、限速设多少、增量怎么和归档配合,每一步都有讲究。配好了,备份对业务几乎无感;配不好,轻则备份超时,重则把生产 IO 打满。下面我把整套思路拆开讲。
1. 先把备份这件事想清楚:KingbaseES 备份方案的整体脉络
1.1 备份不是“做了就行”,而是“恢复得了才行”
我见过太多运维同行把备份等同于“定时跑脚本”,直到某天真的需要恢复时才傻眼:备份文件在,但恢复出来的库起不来;或者 WAL 归档有缺口,时间点恢复到一半报错。这些问题的根源,往往是备份方案从一开始就没设计清楚。
KingbaseES 的备份手段,抛开图形化工具,本质上分三类:逻辑备份、物理全量备份、物理增量备份加 WAL 归档。逻辑备份用sys_dump,导出的是 SQL/数据文件,适合小库迁移、表级导出,恢复粒度细,但速度慢、无法做到精确到秒级的时间点恢复。物理备份用sys_backup,直接拷贝数据文件,速度快、一致性强,是生产环境的主力方案。增量备份则是把自上次备份以来变化的数据块和 WAL 日志抓出来,体积小、频率可以拉得很高。
三类备份不是互斥关系,而是组合关系。我的习惯是:日常用“物理全量 + 周期增量 + 持续 WAL 归档”作为主力,逻辑备份作为兜底,定期对几张关键业务表单独导出,防止物理备份集被误操作污染后连个退路都没有。备份方案一旦确定,要写进操作文档,并且把“恢复演练”当成和备份本身同等重要的事。
1.2 sys_backup 工具的角色与工作目录
sys_backup是金仓自带的物理备份工具,名字和 pg_basebackup 很像,使用思路也接近:它基于数据库的在线备份机制,在数据库运行状态下完成一致性数据拷贝。工具会生成一个独立的备份目录,里面包含基础全量数据、增量数据、WAL 归档以及备份标识文件。恢复时,用sys_backup的恢复模式把备份集还原成一个可启动的数据库实例。
初次上手,我建议你先搞明白两件事:备份目录的规划,以及备份命令的执行身份。备份目录要单独挂一个磁盘或存储,不要和数据库数据目录放在同一块盘上,理由很简单——如果磁盘物理损坏,备份和数据一起丢,备份就失去了意义。执行备份时,建议使用专门创建的备份用户,而不是直接用超级用户 SYSTEM,这样在权限审计时也更清晰。下面是一个最基础的物理全量备份命令:
sys_backup.sh -F -U system -W 密码 -p 54321 -D /backup/kingbase/full_bak-F表示全量备份,-U指定连接用户,-p是数据库端口(按实际安装配置填写),-D指定备份输出目录。第一次跑备份时,先在小环境里完整走一遍,确认命令参数、目录权限和归档配置都正确,再上生产。
2. 并行处理:把备份窗口从小时级压到分钟级
2.1 并行备份的原理与关键参数
数据库备份慢,本质是单进程拷贝数据太慢。数据文件少则几十 GB,多则几个 TB,如果只有一个进程在顺序读盘、写盘,备份耗时就会很长。并行处理的核心思路,是把一个大任务拆成多个小任务,由多个进程/线程同时执行,每个进程负责一部分数据文件的读取和写入,整体吞吐量成倍提升。
sys_backup在备份和恢复两个方向都支持并行。常见的控制参数是并发数(比如-j或者通过配置文件指定 parallel 等级),它决定同时启动多少个工作进程来搬运数据。我最初测试时,用默认单进程备份一个 500GB 的实例,耗时接近 3 小时;把并行度调到 8 之后,耗时压缩到了 40 分钟左右。这个差距在业务备份窗口只有 1 小时的场景下,就是“能不能备份”和“备份不了”的区别。
并行参数并不难配,难的是确认它真的生效。我建议你在跑并行备份时,另开一个终端用top或htop观察 CPU 使用率:如果并发度是 8,你应当能看到多个 sys_backup 相关进程同时处于运行状态,CPU 总体占用明显上升。如果并行度配了但 CPU 使用率纹丝不动,多半是参数没生效,或者备份过程中被磁盘等待拖死了,需要进一步排查。
2.2 并行度怎么选:别盲目拉满
并行度不是越大越好,这是我最想强调的一点。并行进程过多,会对 CPU 和 IO 同时造成压力。一旦磁盘的读写能力成为瓶颈,进程数量再多也是在排队等待,不仅加速有限,还可能干扰正常业务。
我的选型经验可以总结成三点:
- 并行度不要超过数据库服务器可用 CPU 核数的一半。比如 16 核的机器,备份并行度设在 4 到 8 之间,既能用足计算资源,又给业务留有余量。
- 如果数据目录在机械硬盘上,并行度建议控制在 4 以内。机械盘的顺序读写带宽有限,并发太高反而会因为寻道开销导致吞吐下降。
- 如果数据目录是 SSD 或全闪阵列,并行度可以适当设高,8 到 16 都可以尝试,但一定要结合压测结果来定。
下面是我在不同硬件条件下的实测参考,注意这只是经验值,具体数值要以你自己的压测为准:
| 硬件环境 | 建议并行度 | 说明 |
|---|---|---|
| 4 核虚拟机,机械盘 | 2 | 主要受磁盘限制,并发行意义有限 |
| 16 核物理机,SATA SSD | 4~8 | 平衡备份耗时与业务影响 |
| 32 核以上,NVMe 阵列 | 8~16 | 可追求极致速度,但要关注 IO 延迟 |
并行参数设置好之后,不要直接跑生产,先在测试环境压一遍。压测时关注两个指标:备份总耗时,以及备份期间数据库所在磁盘的 IO 利用率。如果 IO 利用率持续超过 80%,说明并行度偏高了,调低一档再试。
2.3 并行恢复的利与弊:速度快,但要防 IO 风暴
并行不仅备份能用,恢复时同样能加速。把备份集还原到新实例时,并行恢复可以大幅度缩短停机时间。但恢复阶段的资源争抢比备份阶段更敏感:备份时业务还在运行,数据库进程本身会参与竞争;恢复时通常是接管服务、业务等待的状态,恢复进程会把磁盘 IO 拉满,速度是快了,但此时如果有其他共享存储上的服务,很容易被波及。
我在一次容灾演练中就踩过这个坑:并行恢复 8 个进程同时读写,把存储阵列的延迟从 5ms 拉高到了 120ms,导致同一存储上的测试库查询全部超时。后来我调整了方案:恢复时并行度先从 4 起步,观察存储延迟不超过基线的两倍再逐步上调。如果你也面临类似的场景,记住一个原则——恢复速度要让位于稳定性,尤其在有共享存储、多实例共存的机房环境里。
3. IO 限速:给备份装上“刹车”,业务不抖动
3.1 为什么备份时必须限速
并行处理是把双刃剑,提速的同时也在加剧 IO 消耗。生产环境的磁盘带宽是有限的,数据库本身有读写请求,备份进程再来抢带宽,双方都会变慢。最典型的表现是:备份一开始,业务侧慢查询变多、应用接口响应时间上涨,甚至监控面板上的 IO 等待指标直接飘红。
IO 限速就是为了控制备份进程的读写速率上限,让它的资源占用维持在一个业务可接受的范围内。你可以把它理解成给备份装了一个“限速阀”:数据还是要搬,但不会一次性把带宽抢光。对于 7x24 小时运行的业务系统,限速不是可选项,而是必须项。
我接手过一个生产库,最初备份方案没有限速,每次凌晨备份都会把磁盘利用率顶到 95% 以上,连带批处理任务全部延迟。后来加上限速,备份时间从 40 分钟拉长到了 75 分钟,但磁盘利用率稳定在 50% 左右,业务批处理再也没被影响过。多花 35 分钟,换来的是整条业务链路的稳定,这笔账非常划算。
3.2 限速参数与单位换算:别把 MB/s 当成 KB/s
KingbaseES 备份工具支持设置数据传输速率上限,参数通常以 KB/s 或 MB/s 为单位,具体要看版本。使用前先确认单位,否则会把限速值设得过大或过小。如果工具单位是 KB/s,想限到 100MB/s,就要写 102400;如果工具直接支持 MB/s 单位,写 100 就行。
我习惯在配置环境变量或命令行参数时,把单位换算写清楚,避免临场心算出错。举个例子,假设生产环境的可用备份带宽评估为 200MB/s,保守起见限到一半,也就是 100MB/s:
sys_backup.sh -F -U system -W 密码 -p 54321 -D /backup/kingbase/full_bak --max-rate=102400这里--max-rate=102400表示限速 100MB/s(按 KB/s 单位计算)。如果你的工具版本支持更友好的参数名,用起来会更直观。设置完成后,观察备份日志中实际传输速率,确认它稳定在设定值附近,没有突破上限。
3.3 限速值怎么定:三步评估法
限速值设多少才合适?我的方法分三步。
第一步,量基线。在业务高峰时段,采集数据库磁盘的读写带宽情况,记录正常状态下的 IO 利用率。这一步起码要观察一周,把峰值和平均值都摸清楚。
第二步,定上限。用磁盘总带宽减去业务峰值带宽,再打一个对折,作为备份限速的初始值。比如磁盘总带宽 400MB/s,业务峰值占掉 250MB/s,那么备份限速初始值可以设为 (400-250)/2=75MB/s。这个值给业务留了 25% 的缓冲区,不至于一有瞬时波动就出问题。
第三步,压测微调。在测试环境或低峰期,按初始值跑一次备份,观察业务侧监控指标。如果 IO 等待和响应时间没有明显恶化,可以试探性上调 20%,再看一轮;如果出现抖动,就下调。经过两三轮调整,你会找到一个“业务无感”的稳定值。
限速还有一个容易被忽略的应用场景:数据迁移和批量导入导出。这些操作本质上和备份一样,都会产生大量 IO,如果不对速率做限制,很容易在白天业务时段引发问题。把限速的思路复用过去,能帮你省掉很多麻烦。
4. 永久增量备份:一次全量,持续增量,恢复点任意选
4.1 永久增量备份到底是什么
很多人在接触“永久增量备份”这个概念时容易误解,以为它是“只做一次全量,之后永远只做增量”。严格来说,它是指整个备份体系以“基础全量 + 持续增量 + WAL 归档”为骨架,日常备份产生的增量数据可以长期累积保留,不需要每隔几天就重新做一次全量。恢复时,通过基础全量叠加增量数据,再配合 WAL 归档做日志回放,可以把数据库恢复到任意时间点。
永久增量备份的核心优势有两个:一是日常备份数据量小,备份频率可以大幅提高,对存储空间的占用增长也远低于反复做全量;二是恢复粒度精细,配合归档日志可以实现分钟级甚至秒级的时间点恢复。它特别适合数据量上百 GB、备份窗口紧张、对恢复时效要求高的生产环境。
我维护的一套业务系统,数据量 1.2TB,如果每周做一次全量备份,备份文件要占掉 1.2TB 乘以保留份数的空间,磁盘成本压力很大。改成“全量 + 永久增量”策略后,每周只有几十 GB 的增量产生,加上归档日志,整个备份体系的存储增长变得非常平缓。
4.2 策略设计与实施步骤
设计永久增量备份策略,我建议从三个时间维度来规划:基础全量多久做一次、增量多久做一次、归档日志保留多久。基础全量不是永远不做,而是把周期拉长,比如每周日凌晨做一次;增量可以每天甚至每几个小时做一次;WAL 归档则要持续开启,并且保留时长至少覆盖两次基础全量的间隔。
实际操作时,先开启归档模式。在 KingbaseES 的配置文件中,把archive_mode设为on,指定archive_command把 WAL 日志拷贝到归档目录。然后执行基础全量备份,再按策略执行增量备份。增量备份工具会自动识别上一次备份的位点,只备份变化的数据块。命令层面和全量备份的差别主要在参数上,增量模式用-I替代-F,其他如用户、端口、目录参数保持一致。
下面是一组简化的策略配置示例,你可以根据自己的环境调整归档命令和备份频率:
# 1. 开启归档(kingbase.conf) archive_mode = on archive_command = 'test ! -f /backup/kingbase/archive/%f && cp %p /backup/kingbase/archive/%f' # 2. 基础全量备份(每周日 02:00) sys_backup.sh -F -U system -W 密码 -p 54321 -D /backup/kingbase/full_bak # 3. 增量备份(每天 02:00,配合系统定时任务执行) sys_backup.sh -I -U system -W 密码 -p 54321 -D /backup/kingbase/inc_bak归档命令里的test ! -f是防止同名 WAL 文件被重复拷贝,属于常见写法。注意:归档目录和备份目录不要混用,建议各自独立子目录,否则恢复时容易定位混乱。
4.3 恢复流程要点:光备份不演练,等于没备份
永久增量备份的恢复链路比全量备份长,步骤通常是:恢复基础全量备份集,再按增量顺序应用增量备份,最后应用 WAL 归档日志到目标时间点。任何一环缺失或顺序颠倒,恢复都会失败。所以我强烈建议,每个季度至少做一次完整的恢复演练,把备份集拿到临时环境,真实跑一遍恢复流程。
恢复时要注意,基础全量备份集必须处于完整可用状态,增量备份要按生成顺序排列,不能跳跃。如果备份集做了校验,先执行校验确认没问题再开始恢复。时间点恢复操作中,指定恢复目标时间要谨慎,时间格式必须与工具要求一致,否则可能恢复到错误的位置。
我见过一次典型的恢复事故:同事误删了一张核心业务表,需要做时间点恢复。由于平时只做了全量备份,没有开归档,只能恢复到上一次全量备份的时间点,近几天的数据全部丢失。如果当时开启了 WAL 归档并配合永久增量备份,完全可以把数据库恢复到误删前几分钟的状态。这个教训说明:凡是要求“恢复到任意时间点”的场景,增量备份和归档必须同时到位,缺一不可。
5. 新环境绕不开的两件事:初始密码与授权文件
5.1 初始密码排查与修改
接手一套新的 KingbaseES 环境时,最先遇到的往往不是备份问题,而是怎么登录进去。金仓数据库安装完成后,默认的超级用户通常是 SYSTEM,初始密码取决于安装方式。如果安装时没有手动指定,一些默认安装包会使用预设密码,但不同版本、不同发行渠道的默认值并不一致,所以最可靠的办法是查安装记录或安装时保存的配置信息。
如果实在找不到初始密码,也不要慌。在数据库所在服务器上,通过操作系统用户切换到金仓的安装用户,通常可以利用本机信任连接或单用户模式进入数据库重置密码。具体命令因版本而异,但思路是一致的:先绕过密码认证进入数据库,再修改 SYSTEM 用户的密码。修改完成后,立刻验证新密码能正常登录,并把密码保存到团队密码管理工具中。
从安全角度出发,我强烈建议不要在测试和生产环境沿用默认密码。密码复杂度要满足至少 12 位、包含大小写字母和数字及特殊字符,并且按团队的变更周期定期更换。备份脚本中如果涉及数据库密码,不要明文写在命令行里,改用环境变量或配置文件并设置好文件权限,避免密码泄露。
5.2 授权文件下载与加载:常见授权问题一网打尽
KingbaseES 是商业数据库,启动和使用依赖授权文件。新环境装好后,如果提示授权到期或授权无效,就需要重新获取授权文件。正规渠道是金仓官方或授权服务商:提交数据库的机器信息,获取对应的授权文件,下载后放到指定位置,重新加载即可。
授权文件加载后,可以用数据库管理工具或系统视图查看授权状态和有效期。常见的授权问题有以下几类:授权文件与当前服务器硬件信息不匹配、文件放置目录不对、加载后没有重启相关服务、授权已过期。排查时按这个顺序检查,基本能定位九成的问题。
这里要特别提醒:授权文件有严格的绑定关系,不要试图通过修改服务器标识来匹配授权,也不要在网上找来历不明的授权文件。轻则授权校验失败,重则带来安全隐患。生产环境务必通过正规渠道获取,并且提前关注授权到期时间,给申请流程留足余量,避免授权过期当天才发现。
6. 实战中的坑与排查技巧速查
6.1 备份失败高频原因与处理
备份失败是常态,关键是要能快速定位。我把实战中遇到的高频问题整理成了速查表,你可以直接收藏备用:
| 故障现象 | 可能原因 | 处理建议 |
|---|---|---|
| 备份启动就报权限错误 | 备份目录属主不对或权限不足 | 检查备份目录的属主和写权限,改为数据库运行用户所有 |
| 备份走到一半网络断开 | 备份连接超时或网络闪断 | 检查网络稳定性,必要时调大超时参数并重试备份 |
| 备份速度远低于预期 | 限速值设置过低,或并行度没生效 | 核对限速参数单位,观察是否真正产生了多个备份进程 |
| 备份目录空间不足 | 增量/归档累积过多 | 清理过期备份集,设置合理的保留策略并配置空间告警 |
| 恢复时找不到归档日志 | WAL 归档有缺口 | 检查归档目录连续性,恢复备份集落在缺口之前的完整时间点 |
| 授权状态异常导致备份拒绝执行 | 授权过期或授权文件与机器不匹配 | 重新获取授权文件并按规范加载,确认授权状态正常 |
排查问题时,先看备份日志,再看系统日志,最后看磁盘和网络状态。备份日志是定位问题的第一手资料,很多报错信息已经把原因写得明明白白,不要急着凭感觉处理。
6.2 备份运维的三个习惯
备份运维做得好不好,差别往往不在技术水平,而在习惯。我总结了三个值得坚持的习惯,分享给大家。
第一个习惯是给备份脚本加完整日志。每次备份的执行时间、备份集路径、校验结果、耗时,都要记录下来。没有日志的备份等于没有发生过,出了问题连排查的入口都没有。
第二个习惯是每天固定时间检查备份状态。不要等告警邮件,而是主动在监控平台看一眼:昨天的备份有没有成功、备份集大小是否在合理范围、归档日志有没有新的产出。自动化监控加上人工巡检,双保险才能让人放心。
第三个习惯是定期做恢复验证。备份成功只是第一步,恢复成功才是最终目的。每个季度把最新的备份集恢复到测试环境,启动数据库做基础查询验证,确认数据完整可用。这个过程还能顺带检验你和团队的操作熟练度,真到灾难现场时不至于手忙脚乱。
说到恢复验证,我个人在实际操作中最深的体会是:恢复演练不要总挑业务低峰期的大块时间。把它拆成小块,每次只验证一条链路,比如这个月只验证“全量备份恢复启动”,下个月验证“增量链 + 归档”应用。这样既不会占用太多时间,又能保持操作手感。备份这件事,真正的价值不在于备份时有多快、多稳,而在于灾难真正降临时,你能平静地说一句:没关系,备份是完整的,恢复路径是清晰的,我们按步骤来。