Skip to content

KingBaseES 增量恢复

增量恢复概述

增量恢复是在全量备份的基础上,恢复自全量备份以来的增量数据,包括事务日志和变更记录。增量恢复可以大大减少恢复时间和备份存储成本,是生产环境中常用的恢复方式。

KingBaseES 支持两种主要的增量恢复方式:

  • 基于WAL归档的增量恢复:使用全量备份和WAL归档日志进行恢复
  • 基于增量备份的恢复:使用全量备份和增量备份文件进行恢复

基于WAL归档的增量恢复

基于WAL归档的增量恢复是KingBaseES最常用的增量恢复方式,依赖于WAL归档功能。

1. 恢复前准备

1.1 环境要求

  • 已启用WAL归档功能
  • 有完整的全量备份文件
  • 有备份期间及之后生成的WAL归档日志
  • 目标服务器已安装与源服务器相同版本的KingBaseES

1.2 备份文件准备

  • 全量备份文件:如/backup/kingbase_full_20231001
  • WAL归档日志:如/archive/目录下的所有WAL文件

2. 恢复步骤

2.1 恢复全量备份

bash
# 停止目标服务器上的KingBaseES服务
systemctl stop kingbase8d.service

# 清空数据目录(确保已备份重要数据)
rm -rf /data/kingbase/*

# 恢复全量备份
sudo -u kingbase cp -r /backup/kingbase_full_20231001/* /data/kingbase/

# 设置正确的权限
chown -R kingbase:kingbase /data/kingbase/

2.2 配置恢复参数

KingBaseES V8 R6

创建 recovery.conf 文件:

ini
# 启用备库模式
standby_mode = 'on'

# WAL恢复命令,从归档目录恢复WAL日志
restore_command = 'cp /archive/%f %p'

# 恢复目标设置
# 恢复到最新状态
recovery_target_timeline = 'latest'

# 或者恢复到特定时间点
# recovery_target_time = '2023-10-01 14:30:00'

# 或者恢复到特定事务ID
# recovery_target_xid = '123456'

# 恢复结束后提升为独立数据库
recovery_target_action = 'promote'
KingBaseES V8 R7

编辑 kingbase.auto.conf 文件:

ini
# 启用备库模式
standby_mode = 'on'

# WAL恢复命令
restore_command = 'cp /archive/%f %p'

# 恢复目标
recovery_target_timeline = 'latest'

# 恢复结束后提升为独立数据库
promote_trigger_file = '/data/kingbase/promote.trigger'

2.3 启动数据库进行增量恢复

bash
# 启动数据库
systemctl start kingbase8d.service

# 监控恢复进度
tail -f /data/kingbase/kingbase.log

2.4 验证恢复结果

sql
-- 连接数据库
ksql -h localhost -p 54321 -U system -d kingbase

-- 查看数据库是否已退出恢复模式
SELECT pg_is_in_recovery();

-- 验证增量数据是否已恢复
SELECT COUNT(*) FROM public.employee WHERE create_time > '2023-10-01 12:00:00';

-- 查看恢复点信息
SELECT * FROM pg_stat_recovery_prefetch;  -- V8 R7

3. 基于WAL归档的增量恢复最佳实践

  • 确保WAL归档功能正常工作
  • 定期测试增量恢复流程
  • 保留足够的WAL归档日志
  • 恢复过程中监控日志,及时发现问题
  • 恢复后验证增量数据的完整性

基于增量备份的恢复

基于增量备份的恢复是使用专门的增量备份工具(如pg_rman)进行的增量恢复,适合大型数据库环境。

1. 恢复前准备

1.1 环境要求

  • 已安装pg_rman工具
  • 有完整的全量备份
  • 有自全量备份以来的增量备份
  • 目标服务器已安装与源服务器相同版本的KingBaseES

1.2 备份文件准备

  • 全量备份:如/backup/kingbase_rman/full
  • 增量备份:如/backup/kingbase_rman/incremental

2. 恢复步骤

2.1 使用pg_rman进行恢复

bash
# 初始化恢复环境
sudo -u kingbase pg_rman init -D /data/kingbase -A /archive -B /backup/kingbase_rman

# 检查备份集完整性
sudo -u kingbase pg_rman validate -B /backup/kingbase_rman

# 执行恢复,包括全量和增量
sudo -u kingbase pg_rman restore -D /data/kingbase -B /backup/kingbase_rman --recovery-target-time='2023-10-01 14:30:00'

# 设置正确的权限
chown -R kingbase:kingbase /data/kingbase/

2.2 启动数据库

bash
# 启动数据库
systemctl start kingbase8d.service

# 监控恢复进度
tail -f /data/kingbase/kingbase.log

2.3 验证恢复结果

sql
-- 连接数据库
ksql -h localhost -p 54321 -U system -d kingbase

-- 验证数据完整性
SELECT COUNT(*) FROM public.employee;
SELECT MAX(create_time) FROM public.employee;

3. 基于增量备份的恢复最佳实践

  • 定期进行全量备份,减少增量备份链的长度
  • 使用可靠的备份工具,如pg_rman
  • 定期验证备份集的完整性
  • 恢复前测试备份工具的兼容性
  • 恢复后验证数据的完整性和一致性

时间点恢复(PITR)

时间点恢复是增量恢复的一种特殊形式,将数据库恢复到特定的时间点,常用于恢复误操作或逻辑错误。

1. 恢复到特定时间点

1.1 配置恢复参数

KingBaseES V8 R6
ini
# 恢复到特定时间点
recovery_target_time = '2023-10-01 14:25:00'
recovery_target_action = 'promote'
KingBaseES V8 R7
ini
# 恢复到特定时间点
recovery_target_time = '2023-10-01 14:25:00'
promote_trigger_file = '/data/kingbase/promote.trigger'

1.2 执行恢复

按照前面介绍的基于WAL归档的增量恢复步骤执行恢复。

2. 恢复到特定事务ID

2.1 配置恢复参数

KingBaseES V8 R6
ini
# 恢复到特定事务ID
recovery_target_xid = '123456'
recovery_target_action = 'promote'
KingBaseES V8 R7
ini
# 恢复到特定事务ID
recovery_target_xid = '123456'
promote_trigger_file = '/data/kingbase/promote.trigger'

2.2 执行恢复

按照前面介绍的基于WAL归档的增量恢复步骤执行恢复。

3. 时间点恢复最佳实践

  • 精确确定需要恢复的时间点
  • 恢复前备份目标数据库
  • 在测试环境验证恢复结果
  • 恢复后验证业务数据的完整性
  • 记录恢复过程和结果

增量恢复注意事项

1. WAL归档管理

  • 确保WAL归档功能正常工作
  • 定期清理过期的WAL归档日志
  • 监控WAL归档目录的磁盘空间
  • 考虑将WAL归档存储在异地

2. 备份链管理

  • 定期进行全量备份,避免过长的增量备份链
  • 验证备份链的完整性
  • 考虑使用差异备份替代增量备份,减少恢复时间

3. 恢复顺序

  • 必须先恢复全量备份,再恢复增量备份
  • 增量备份必须按顺序恢复,不能跳过
  • 恢复过程中不能中断,否则可能导致数据不一致

4. 性能优化

  • 恢复前调整work_memmaintenance_work_mem参数
  • 对于大型数据库,考虑使用并行恢复
  • 恢复过程中关闭不必要的服务和进程

常见问题

Q1: 恢复过程中提示 "could not find WAL file"?

解决方案

  • 检查WAL归档目录是否包含所需的WAL文件
  • 验证WAL文件名是否正确
  • 检查restore_command配置是否正确
  • 确保全量备份和WAL归档的一致性

Q2: 恢复后某些数据没有恢复?

解决方案

  • 检查恢复的时间点是否正确
  • 验证WAL归档日志是否完整
  • 检查恢复过程中是否有错误
  • 考虑重新执行恢复

Q3: 恢复速度慢?

解决方案

  • 对于基于WAL归档的恢复,考虑使用更快的存储设备
  • 调整checkpoint_completion_target参数
  • 关闭不必要的约束和触发器
  • 考虑使用并行恢复

Q4: 恢复后数据库无法启动?

解决方案

  • 检查数据目录权限是否正确
  • 查看日志文件,定位具体错误
  • 验证恢复的文件完整性
  • 检查恢复配置是否正确

Q5: 如何确定需要恢复的时间点?

解决方案

  • 查看应用日志,确定错误发生的时间
  • 查看数据库日志,确定事务提交的时间
  • 与业务人员沟通,确定需要恢复到的时间点
  • 考虑恢复到错误发生前的一个安全时间点

版本差异注意事项

V8 R6 与 V8 R7 增量恢复差异

特性V8 R6V8 R7
恢复配置文件recovery.confkingbase.auto.conf
恢复监控视图基本视图增强的监控视图
WAL恢复优化基本优化增强的WAL恢复优化
并行恢复有限支持增强支持
云存储恢复不支持支持
pg_rman版本旧版本新版本,增强功能

总结

增量恢复是KingBaseES生产环境中常用的恢复方式,可以大大减少恢复时间和备份存储成本。通过选择合适的增量恢复方式、遵循正确的恢复步骤、注意恢复过程中的细节,可以确保恢复的成功率和数据的完整性。

在实际生产环境中,建议:

  1. 定期测试增量恢复流程
  2. 确保WAL归档功能正常工作
  3. 合理管理备份链,避免过长的增量备份链
  4. 精确确定恢复时间点
  5. 恢复后验证数据的完整性和一致性

通过遵循这些最佳实践,可以确保在发生数据丢失或灾难事件时,能够快速、可靠地恢复数据,最大限度地减少业务中断时间。