外观
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.log2.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.dmp2.2.2 从SQL脚本备份恢复
bash
# 恢复SQL脚本备份
ksql -h localhost -p 54321 -U system -d kingbase_recover -f /backup/kingbase_full_logical_20231001.sql2.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.tar2.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_mem和maintenance_work_mem参数
3. 数据一致性
- 恢复后验证数据完整性
- 检查约束和索引是否完整
- 验证业务逻辑是否正常
4. 安全性
- 恢复后重置用户密码
- 检查权限配置
- 启用必要的安全设置
常见问题
Q1: 物理恢复后数据库无法启动?
解决方案:
- 检查数据目录权限是否正确
- 查看日志文件,定位具体错误
- 确保恢复的文件完整性
- 检查
recovery.conf或kingbase.auto.conf配置是否正确
Q2: 逻辑恢复时提示 "permission denied"?
解决方案:
- 确保使用具有足够权限的用户执行恢复
- 检查目标数据库的权限配置
- 确保目标数据库存在
Q3: 恢复速度慢?
解决方案:
- 对于物理恢复,考虑使用更快的存储设备
- 对于逻辑恢复,启用并行恢复
-j参数 - 调整
work_mem和maintenance_work_mem参数 - 关闭不必要的约束和触发器(恢复后重新启用)
Q4: 恢复后数据不一致?
解决方案:
- 检查备份文件的完整性
- 验证备份时的数据库状态
- 检查恢复过程中是否有错误
- 考虑重新备份和恢复
Q5: 恢复后某些对象缺失?
解决方案:
- 检查备份文件是否包含所有对象
- 检查恢复命令是否正确
- 查看恢复日志,确认是否有对象恢复失败
- 考虑重新恢复缺失的对象
版本差异注意事项
V8 R6 与 V8 R7 恢复差异
| 特性 | V8 R6 | V8 R7 |
|---|---|---|
| 恢复配置文件 | recovery.conf | kingbase.auto.conf |
| 并行恢复 | 有限支持 | 增强支持 |
| 恢复命令 | 基本命令 | 增强的恢复命令 |
| 恢复监控 | 基本监控 | 增强的监控视图 |
| 云存储恢复 | 不支持 | 支持 |
总结
全量恢复是数据库运维中重要的技能,直接关系到数据的安全性和可靠性。通过选择合适的恢复方式、遵循正确的恢复步骤、注意恢复过程中的细节,可以确保恢复的成功率和数据的完整性。
在实际生产环境中,建议定期进行恢复测试,验证备份的可用性和恢复流程的有效性。同时,建立完善的恢复文档和应急预案,以便在发生灾难时能够快速响应和恢复。
