Skip to content

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: 租户级恢复后需要做以下后续操作:

  • 激活并启动租户
  • 验证数据完整性
  • 验证业务功能
  • 验证性能指标
  • 更新租户配置
  • 执行安全检查