外观
OceanBase 租户级恢复
租户级恢复的应用场景
- 租户数据损坏恢复:当某个租户的数据出现损坏时,可以通过租户级恢复将其恢复到指定时间点
- 租户误操作恢复:当租户管理员执行了错误操作(如误删除表、误更新数据)时,可以通过租户级恢复回滚到操作前的状态
- 租户迁移验证:在租户迁移前,可以先通过租户级恢复在目标环境验证恢复效果
- 测试环境数据刷新:将生产环境的租户数据恢复到测试环境,用于测试和开发
租户级恢复的类型
- 基于备份集的恢复:使用租户的物理备份集进行恢复
- 基于时间点的恢复(PITR):将租户恢复到指定的时间点
- 基于日志的恢复:使用归档日志和Redo日志进行恢复
租户级恢复的前提条件
环境准备
- 目标集群必须已经部署并正常运行
- 目标集群的版本必须与备份集的版本兼容
- 目标集群必须有足够的资源(CPU、内存、磁盘)来容纳恢复的租户
- 确保目标集群的网络可以访问备份存储
备份准备
- 已经完成了租户的物理备份
- 备份集包含完整的租户数据和元数据
- 备份集存储在可访问的位置(本地存储或远程存储)
- 如果需要PITR恢复,还需要对应的归档日志
权限准备
- 执行恢复操作的用户必须具有系统租户的SYSTEM或SUPER权限
- 恢复目标租户的管理员权限
租户级恢复的操作步骤
步骤一:查看备份集信息
在执行租户级恢复前,需要先查看可用的备份集信息,确定要使用的备份集。
sql
-- 查看备份集列表
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET;
-- 查看特定租户的备份集
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET WHERE tenant_id = 1002;
-- 查看备份集的详细信息
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_DETAIL WHERE backup_set_id = 1001;步骤二:准备恢复环境
在执行租户级恢复前,需要准备好恢复环境,包括创建恢复目录、配置恢复参数等。
sql
-- 查看恢复相关参数
SHOW PARAMETERS LIKE 'restore%';
-- 配置恢复目录
ALTER SYSTEM SET restore_dest = '/data/ob/restore';
-- 配置恢复并行度
ALTER SYSTEM SET restore_concurrency = 8;
-- 配置恢复内存限制
ALTER SYSTEM SET restore_memory_limit = '10G';步骤三:执行租户级恢复
使用OBR(OceanBase Backup and Recovery)工具或SQL命令执行租户级恢复。
使用OBR工具执行恢复
bash
# 查看OBR版本
obr --version
# 执行租户级恢复
obr restore tenant \
--tenant-name=test_tenant \
--backup-set-id=1001 \
--restore-dest=/data/ob/restore \
--cluster-id=1 \
--sys-user=root \
--sys-password=password \
--host=127.0.0.1 \
--port=2881使用SQL命令执行恢复
sql
-- 开始租户级恢复
ALTER SYSTEM RESTORE TENANT test_tenant FROM BACKUP_SET '1001';
-- 查看恢复进度
SELECT * FROM oceanbase.GV$OB_RESTORE_PROGRESS WHERE tenant_id = 1002;
-- 查看恢复状态
SELECT * FROM oceanbase.GV$OB_RESTORE_STATUS WHERE tenant_id = 1002;步骤四:完成恢复操作
当恢复操作完成后,需要执行一些后续操作,确保租户可以正常使用。
sql
-- 查看租户状态
SELECT * FROM oceanbase.GV$OB_TENANTS WHERE tenant_id = 1002;
-- 激活租户
ALTER TENANT test_tenant ENABLE;
-- 启动租户服务
ALTER TENANT test_tenant START SERVICE;
-- 验证租户数据
USE test_tenant;
SELECT COUNT(*) FROM test_table;租户级PITR恢复
基于时间点的恢复(PITR)是指将租户恢复到指定的时间点。PITR恢复需要使用备份集和对应的归档日志。
PITR恢复的前提条件
- 已经完成了租户的物理备份
- 备份集之后的归档日志完整可用
- 目标集群的版本与备份集的版本兼容
PITR恢复的操作步骤
步骤一:查看备份集和归档日志信息
sql
-- 查看备份集列表
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET WHERE tenant_id = 1002;
-- 查看归档日志信息
SELECT * FROM oceanbase.CDB_OB_ARCHIVE_LOG WHERE tenant_id = 1002;步骤二:执行PITR恢复
bash
# 使用OBR工具执行PITR恢复
obr restore tenant \
--tenant-name=test_tenant \
--backup-set-id=1001 \
--restore-dest=/data/ob/restore \
--recovery-time='2023-10-01 14:30:00' \
--cluster-id=1 \
--sys-user=root \
--sys-password=password \
--host=127.0.0.1 \
--port=2881步骤三:验证PITR恢复结果
sql
-- 激活并启动租户
ALTER TENANT test_tenant ENABLE;
ALTER TENANT test_tenant START SERVICE;
-- 验证数据是否恢复到指定时间点
USE test_tenant;
SELECT * FROM test_table WHERE update_time < '2023-10-01 14:30:00';租户级恢复的最佳实践
恢复前准备
- 备份验证:在执行恢复前,先验证备份集的完整性和可用性
- 资源评估:评估目标集群是否有足够的资源容纳恢复的租户
- 恢复环境隔离:最好在隔离的环境中进行恢复测试,避免影响生产环境
- 恢复计划制定:制定详细的恢复计划,包括恢复步骤、时间窗口和回滚策略
恢复过程中的注意事项
- 监控恢复进度:实时监控恢复进度,及时发现并处理恢复过程中的问题
- 调整恢复参数:根据实际情况调整恢复并行度、内存限制等参数,提高恢复效率
- 避免资源竞争:在恢复过程中,避免在目标集群上执行高负载操作,以免影响恢复性能
- 记录恢复过程:详细记录恢复过程中的操作和结果,便于后续分析和审计
恢复后的验证
- 数据完整性验证:验证恢复后的数据完整性,确保没有数据丢失
- 业务功能验证:验证恢复后的租户业务功能是否正常
- 性能验证:验证恢复后的租户性能是否符合预期
- 安全验证:验证恢复后的租户安全配置是否正确
租户级恢复的常见问题
恢复速度慢
症状:租户级恢复速度缓慢,耗时过长
解决方案:
- 增加恢复并行度:
ALTER SYSTEM SET restore_concurrency = 16; - 增加恢复内存限制:
ALTER SYSTEM SET restore_memory_limit = '20G'; - 使用更快的存储设备:将恢复目录迁移到SSD存储
- 减少目标集群的负载:在恢复期间避免执行其他高负载操作
恢复失败
症状:租户级恢复操作失败,出现错误信息
解决方案:
- 检查备份集完整性:
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_VALIDATION WHERE backup_set_id = 1001; - 检查恢复目录权限:确保恢复目录具有正确的读写权限
- 检查目标集群资源:确保目标集群有足够的资源
- 查看错误日志:
grep -i "restore" /home/oceanbase/log/observer.log
恢复后租户无法启动
症状:租户级恢复完成后,租户无法正常启动
解决方案:
- 检查租户状态:
SELECT * FROM oceanbase.GV$OB_TENANTS WHERE tenant_id = 1002; - 检查租户配置:
SHOW TENANT test_tenant PARAMETERS; - 查看租户日志:
grep -i "tenant=1002" /home/oceanbase/log/observer.log - 执行租户诊断:
ALTER SYSTEM DIAGNOSE TENANT test_tenant;
租户级恢复与其他恢复类型的对比
| 恢复类型 | 影响范围 | 恢复速度 | 资源消耗 | 应用场景 |
|---|---|---|---|---|
| 租户级恢复 | 单个租户 | 较快 | 中等 | 租户数据损坏、误操作恢复 |
| 数据库级恢复 | 整个数据库 | 较慢 | 较高 | 数据库灾难恢复 |
| 表级恢复 | 单个表 | 最快 | 较低 | 表数据损坏、误删除表恢复 |
租户级恢复的限制
- 租户级恢复只能恢复到与备份集版本兼容的集群
- 租户级恢复需要使用相同或更高版本的OBR工具
- 租户级恢复期间,目标租户将处于不可用状态
- 租户级恢复会覆盖目标租户的现有数据
- PITR恢复需要完整的归档日志支持
租户级恢复的监控与管理
监控恢复进度
sql
-- 查看恢复进度
SELECT * FROM oceanbase.GV$OB_RESTORE_PROGRESS WHERE tenant_id = 1002;
-- 查看恢复状态
SELECT * FROM oceanbase.GV$OB_RESTORE_STATUS WHERE tenant_id = 1002;
-- 查看恢复任务
SELECT * FROM oceanbase.GV$OB_RESTORE_TASK WHERE tenant_id = 1002;取消恢复任务
sql
-- 取消恢复任务
ALTER SYSTEM CANCEL RESTORE TENANT test_tenant;查看恢复历史
sql
-- 查看恢复历史记录
SELECT * FROM oceanbase.CDB_OB_RESTORE_HISTORY WHERE tenant_id = 1002;常见问题(FAQ)
Q1: 租户级恢复需要停止租户吗?
A1: 是的,在执行租户级恢复前,需要先停止租户服务。恢复完成后,需要重新启动租户服务。
Q2: 租户级恢复会影响其他租户吗?
A2: 不会,租户级恢复只影响指定的租户,不会影响其他租户的正常运行。
Q3: 租户级恢复可以恢复到不同的集群吗?
A3: 是的,租户级恢复支持跨集群恢复,但目标集群的版本必须与备份集的版本兼容。
Q4: 如何选择合适的恢复时间点?
A4: 选择恢复时间点时,需要考虑:
- 确保恢复时间点在备份集的时间范围内
- 选择在业务低峰期进行恢复
- 考虑数据一致性要求,选择合适的时间点
Q5: 租户级恢复需要多长时间?
A5: 租户级恢复的时间取决于多种因素:
- 备份集的大小
- 恢复并行度的设置
- 目标集群的资源状况
- 存储设备的性能
Q6: 如何验证恢复后的数据完整性?
A6: 验证恢复后的数据完整性可以通过以下方法:
- 比较恢复前后的数据量
- 执行数据校验命令
- 运行业务验证测试
- 检查数据一致性
Q7: 可以同时恢复多个租户吗?
A7: 是的,可以同时恢复多个租户,但需要考虑目标集群的资源状况,避免资源竞争导致恢复速度变慢。
Q8: 租户级恢复失败后如何处理?
A8: 租户级恢复失败后,可以:
- 查看错误日志,分析失败原因
- 修复问题后重新执行恢复操作
- 如果恢复目录被污染,需要清理后重新执行
Q9: 如何提高租户级恢复的成功率?
A9: 提高租户级恢复成功率的方法:
- 定期验证备份集的完整性
- 保持归档日志的完整性
- 制定详细的恢复计划
- 在测试环境中验证恢复流程
- 定期进行恢复演练
Q10: 租户级恢复后需要做哪些后续操作?
A10: 租户级恢复后需要做以下后续操作:
- 激活并启动租户
- 验证数据完整性
- 验证业务功能
- 验证性能指标
- 更新租户配置
- 执行安全检查
