外观
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.log2.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 R73. 基于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.log2.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_mem和maintenance_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 R6 | V8 R7 |
|---|---|---|
| 恢复配置文件 | recovery.conf | kingbase.auto.conf |
| 恢复监控视图 | 基本视图 | 增强的监控视图 |
| WAL恢复优化 | 基本优化 | 增强的WAL恢复优化 |
| 并行恢复 | 有限支持 | 增强支持 |
| 云存储恢复 | 不支持 | 支持 |
| pg_rman版本 | 旧版本 | 新版本,增强功能 |
总结
增量恢复是KingBaseES生产环境中常用的恢复方式,可以大大减少恢复时间和备份存储成本。通过选择合适的增量恢复方式、遵循正确的恢复步骤、注意恢复过程中的细节,可以确保恢复的成功率和数据的完整性。
在实际生产环境中,建议:
- 定期测试增量恢复流程
- 确保WAL归档功能正常工作
- 合理管理备份链,避免过长的增量备份链
- 精确确定恢复时间点
- 恢复后验证数据的完整性和一致性
通过遵循这些最佳实践,可以确保在发生数据丢失或灾难事件时,能够快速、可靠地恢复数据,最大限度地减少业务中断时间。
