Skip to content

KingBaseES 全量恢复

全量恢复概述

全量恢复是将数据库恢复到某个特定时间点的完整状态,包括所有数据和对象。根据备份类型的不同,全量恢复可以分为物理全量恢复和逻辑全量恢复两种方式。

物理全量恢复

物理全量恢复是通过恢复数据库物理文件来实现的,恢复速度快,适合灾难恢复场景。

1. 恢复前准备

1.1 环境检查

  • 确保目标服务器的硬件配置与源服务器兼容
  • 确保目标服务器已安装与源服务器相同版本的KingBaseES
  • 确保目标服务器有足够的磁盘空间存放数据文件
  • 停止目标服务器上的KingBaseES服务

1.2 备份文件准备

  • 准备完整的物理备份文件
  • 准备备份期间生成的WAL日志文件(如果使用了WAL归档)
  • 确保备份文件的完整性和一致性

2. 恢复步骤

2.1 恢复物理文件

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

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

# 恢复物理备份文件
# 方式1:从pg_basebackup备份恢复
sudo -u kingbase cp -r /backup/kingbase_full_20231001/* /data/kingbase/

# 方式2:从tar格式备份恢复
tar -xzvf /backup/kingbase_full_20231001.tar -C /data/kingbase/

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

2.2 配置恢复参数

如果需要恢复到备份后的某个时间点,需要配置恢复参数:

KingBaseES V8 R6

创建 recovery.conf 文件:

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

# 主库连接信息(如果需要从主库恢复WAL)
# primary_conninfo = 'host=192.168.1.100 port=54321 user=repluser password=repluser123'

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

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

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

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

# 恢复结束后是否提升为独立数据库
# 0:保持备库模式
# 1:提升为独立数据库
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 pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn) AS replay_delay FROM pg_stat_replication;

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

3. 物理全量恢复最佳实践

  • 在恢复前备份目标服务器的数据目录
  • 使用与源服务器相同版本的KingBaseES
  • 确保备份文件和WAL日志的完整性
  • 恢复过程中监控日志,及时发现问题
  • 恢复后验证数据完整性和一致性

逻辑全量恢复

逻辑全量恢复是通过恢复数据库逻辑对象来实现的,跨版本兼容性好,适合选择性恢复和数据迁移场景。

1. 恢复前准备

1.1 环境检查

  • 确保目标服务器已安装KingBaseES
  • 确保目标服务器的版本与源服务器兼容
  • 确保目标服务器有足够的资源

1.2 备份文件准备

  • 准备完整的逻辑备份文件
  • 确保备份文件的完整性

2. 恢复步骤

2.1 创建目标数据库

sql
-- 连接到模板数据库
ksql -h localhost -p 54321 -U system -d template1

-- 创建目标数据库
CREATE DATABASE kingbase_recover;

2.2 恢复逻辑备份

2.2.1 从自定义格式备份恢复
bash
# 恢复自定义格式备份
pg_restore -h localhost -p 54321 -U system -d kingbase_recover -F c -b -v /backup/kingbase_full_logical_20231001.dmp
2.2.2 从SQL脚本备份恢复
bash
# 恢复SQL脚本备份
ksql -h localhost -p 54321 -U system -d kingbase_recover -f /backup/kingbase_full_logical_20231001.sql
2.2.3 从tar格式备份恢复
bash
# 恢复tar格式备份
pg_restore -h localhost -p 54321 -U system -d kingbase_recover -F t -b -v /backup/kingbase_full_logical_20231001.tar

2.3 验证恢复结果

sql
-- 连接恢复后的数据库
ksql -h localhost -p 54321 -U system -d kingbase_recover

-- 查看数据库对象
\dt+ -- 查看表
\dv+ -- 查看视图
\df+ -- 查看函数
\l+ -- 查看数据库

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

3. 逻辑全量恢复最佳实践

  • 恢复前清理目标数据库
  • 使用与源服务器兼容的KingBaseES版本
  • 对于大型数据库,考虑使用并行恢复
  • 恢复过程中监控系统资源使用情况
  • 恢复后验证数据完整性和一致性

全量恢复注意事项

1. 版本兼容性

  • 物理恢复要求目标服务器与源服务器使用相同版本的KingBaseES
  • 逻辑恢复支持跨小版本恢复,但不支持跨大版本恢复
  • 跨版本恢复前,建议先在测试环境验证

2. 性能优化

  • 物理恢复时,关闭不必要的服务和进程
  • 逻辑恢复时,考虑使用 -j 参数启用并行恢复
  • 恢复前调整 work_memmaintenance_work_mem 参数

3. 数据一致性

  • 恢复后验证数据完整性
  • 检查约束和索引是否完整
  • 验证业务逻辑是否正常

4. 安全性

  • 恢复后重置用户密码
  • 检查权限配置
  • 启用必要的安全设置

常见问题

Q1: 物理恢复后数据库无法启动?

解决方案

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

Q2: 逻辑恢复时提示 "permission denied"?

解决方案

  • 确保使用具有足够权限的用户执行恢复
  • 检查目标数据库的权限配置
  • 确保目标数据库存在

Q3: 恢复速度慢?

解决方案

  • 对于物理恢复,考虑使用更快的存储设备
  • 对于逻辑恢复,启用并行恢复 -j 参数
  • 调整 work_memmaintenance_work_mem 参数
  • 关闭不必要的约束和触发器(恢复后重新启用)

Q4: 恢复后数据不一致?

解决方案

  • 检查备份文件的完整性
  • 验证备份时的数据库状态
  • 检查恢复过程中是否有错误
  • 考虑重新备份和恢复

Q5: 恢复后某些对象缺失?

解决方案

  • 检查备份文件是否包含所有对象
  • 检查恢复命令是否正确
  • 查看恢复日志,确认是否有对象恢复失败
  • 考虑重新恢复缺失的对象

版本差异注意事项

V8 R6 与 V8 R7 恢复差异

特性V8 R6V8 R7
恢复配置文件recovery.confkingbase.auto.conf
并行恢复有限支持增强支持
恢复命令基本命令增强的恢复命令
恢复监控基本监控增强的监控视图
云存储恢复不支持支持

总结

全量恢复是数据库运维中重要的技能,直接关系到数据的安全性和可靠性。通过选择合适的恢复方式、遵循正确的恢复步骤、注意恢复过程中的细节,可以确保恢复的成功率和数据的完整性。

在实际生产环境中,建议定期进行恢复测试,验证备份的可用性和恢复流程的有效性。同时,建立完善的恢复文档和应急预案,以便在发生灾难时能够快速响应和恢复。