Skip to content

OceanBase 租户备份与恢复

租户备份类型

物理备份

  1. 全量物理备份:备份租户的所有数据文件
  2. 增量物理备份:备份自上次备份以来变化的数据
  3. 日志备份:备份租户的事务日志,用于 PITR(Point-in-Time Recovery)

逻辑备份

  1. 全量逻辑备份:使用 mysqldump 或 OBLOADER/OBUNLOADER 备份租户的逻辑数据
  2. 增量逻辑备份:通过日志挖掘或变更数据捕获实现增量逻辑备份

租户备份配置

配置备份目的地

sql
-- 配置租户级备份目的地
ALTER SYSTEM SET backup_dest = 'file:///data/ob_backup' TENANT = 'tenant_name';

-- 配置备份集大小限制
ALTER SYSTEM SET backup_set_size = '10G' TENANT = 'tenant_name';

-- 配置备份并发度
ALTER SYSTEM SET backup_concurrency = 4 TENANT = 'tenant_name';

配置日志归档

sql
-- 启用日志归档
ALTER SYSTEM SET enable_syslog_recycle = 'true' TENANT = 'tenant_name';

-- 配置日志归档目的地
ALTER SYSTEM SET log_archive_dest = 'file:///data/ob_archive' TENANT = 'tenant_name';

-- 配置日志归档模式
ALTER SYSTEM SET log_archive_mode = 'all' TENANT = 'tenant_name';

配置备份策略

sql
-- 创建备份策略
CREATE BACKUP POLICY 'policy_name' 
TENANT = 'tenant_name'
BACKUP TYPE = FULL
BACKUP DIR = 'file:///data/ob_backup'
BACKUP RETENTION DAYS = 7
BACKUP SCHEDULE = '0 0 * * *';

-- 启用备份策略
ALTER BACKUP POLICY 'policy_name' ENABLE;

租户备份操作

手动执行全量备份

sql
-- 执行租户全量备份
BACKUP TENANT 'tenant_name' FULL TO 'file:///data/ob_backup/full_backup';

-- 查看备份进度
SELECT * FROM oceanbase.DBA_OB_BACKUP_PROGRESS WHERE tenant_name = 'tenant_name';

-- 查看备份集信息
SELECT * FROM oceanbase.DBA_OB_BACKUP_SET WHERE tenant_name = 'tenant_name' ORDER BY backup_set_id DESC;

手动执行增量备份

sql
-- 执行租户增量备份
BACKUP TENANT 'tenant_name' INCREMENTAL TO 'file:///data/ob_backup/incr_backup'
BASE ON BACKUPSET 'full_backup_set_id';

-- 查看增量备份集信息
SELECT * FROM oceanbase.DBA_OB_BACKUP_SET WHERE backup_type = 'INCREMENTAL' AND tenant_name = 'tenant_name' ORDER BY backup_set_id DESC;

手动执行日志备份

sql
-- 执行日志备份
BACKUP TENANT 'tenant_name' LOGS TO 'file:///data/ob_backup/log_backup';

-- 查看日志备份信息
SELECT * FROM oceanbase.DBA_OB_BACKUP_LOG WHERE tenant_name = 'tenant_name' ORDER BY log_id DESC;

租户恢复操作

查看可恢复的备份集

sql
-- 查看可用的全量备份集
SELECT * FROM oceanbase.DBA_OB_RESTORE_AVAILABLE_BACKUPSET WHERE tenant_name = 'tenant_name' AND backup_type = 'FULL';

-- 查看可用的增量备份集
SELECT * FROM oceanbase.DBA_OB_RESTORE_AVAILABLE_BACKUPSET WHERE tenant_name = 'tenant_name' AND backup_type = 'INCREMENTAL';

执行租户恢复

sql
-- 恢复租户到指定时间点
RESTORE TENANT 'tenant_name' FROM 'file:///data/ob_backup'
BACKUPSET 'full_backup_set_id'
INCREMENTAL BACKUPSET 'incr_backup_set_id'
UNTIL TIME '2023-12-31 23:59:59';

-- 查看恢复进度
SELECT * FROM oceanbase.DBA_OB_RESTORE_PROGRESS WHERE tenant_name = 'tenant_name';

-- 恢复完成后激活租户
ALTER TENANT 'tenant_name' ACTIVATE;

克隆租户

sql
-- 从备份集克隆租户
CREATE TENANT 'new_tenant' 
FROM BACKUPSET 'backup_set_id'
BACKUP DEST = 'file:///data/ob_backup'
PRIMARY_ZONE = 'zone1'
RESOURCE_POOL_LIST = ('resource_pool_name');

-- 激活克隆的租户
ALTER TENANT 'new_tenant' ACTIVATE;

租户备份与恢复最佳实践

备份策略建议

  1. 定期全量备份:建议每周执行一次全量备份
  2. 定期增量备份:建议每天执行一次增量备份
  3. 持续日志备份:启用日志归档,确保可以进行 PITR
  4. 多副本备份:将备份数据存储在多个位置,提高备份可靠性
  5. 定期验证备份:定期恢复备份,验证备份的可用性

恢复策略建议

  1. 制定恢复计划:针对不同场景制定详细的恢复计划
  2. 定期演练恢复:定期进行恢复演练,验证恢复流程
  3. 监控恢复进度:在恢复过程中密切监控恢复进度和系统资源使用
  4. 验证恢复结果:恢复完成后,验证数据完整性和一致性
  5. 记录恢复过程:详细记录恢复过程,便于后续分析和优化

性能优化建议

  1. 调整备份并发度:根据系统资源情况调整备份并发度
  2. 优化备份目的地:使用高性能存储设备存储备份数据
  3. 避开业务高峰期:在业务低峰期执行备份和恢复操作
  4. 合理设置备份集大小:根据存储设备情况设置合适的备份集大小
  5. 优化恢复并行度:根据系统资源情况调整恢复并行度

租户备份与恢复监控

监控备份进度

sql
-- 查看备份进度
SELECT * FROM oceanbase.DBA_OB_BACKUP_PROGRESS WHERE tenant_name = 'tenant_name';

-- 查看备份历史
SELECT * FROM oceanbase.DBA_OB_BACKUP_HISTORY WHERE tenant_name = 'tenant_name' ORDER BY backup_id DESC;

监控恢复进度

sql
-- 查看恢复进度
SELECT * FROM oceanbase.DBA_OB_RESTORE_PROGRESS WHERE tenant_name = 'tenant_name';

-- 查看恢复历史
SELECT * FROM oceanbase.DBA_OB_RESTORE_HISTORY WHERE tenant_name = 'tenant_name' ORDER BY restore_id DESC;

监控备份空间使用

sql
-- 查看备份集大小
SELECT backup_set_id, backup_type, tenant_name, ROUND(total_bytes/1024/1024/1024, 2) AS size_gb 
FROM oceanbase.DBA_OB_BACKUP_SET 
WHERE tenant_name = 'tenant_name' 
ORDER BY backup_set_id DESC;

常见问题(FAQ)

Q1: 租户备份会影响业务性能吗?

A1: 租户备份会占用一定的系统资源,可能会对业务性能产生一定影响。建议在业务低峰期执行备份操作,并合理配置备份并发度和资源使用。

Q2: 如何验证备份的可用性?

A2: 可以通过以下方式验证备份的可用性:

  1. 定期执行恢复演练
  2. 使用备份集克隆测试租户
  3. 验证备份集的元数据完整性
sql
-- 验证备份集完整性
VALIDATE BACKUPSET 'backup_set_id' FROM 'file:///data/ob_backup';

Q3: 如何进行跨集群的租户恢复?

A3: 跨集群租户恢复的步骤如下:

  1. 将备份数据复制到目标集群
  2. 在目标集群创建资源池
  3. 使用备份集在目标集群恢复租户
  4. 激活恢复的租户
  5. 验证恢复结果

Q4: 如何优化租户备份速度?

A4: 可以通过以下方式优化租户备份速度:

  1. 增加备份并发度
  2. 使用高性能存储设备
  3. 优化网络配置(如果备份到远程位置)
  4. 避开业务高峰期
  5. 合理设置备份集大小
sql
-- 调整备份并发度
ALTER SYSTEM SET backup_concurrency = 8 TENANT = 'tenant_name';

Q5: 如何处理备份失败?

A5: 备份失败时,可以尝试以下操作:

  1. 查看备份日志,分析失败原因
  2. 检查备份目的地的空间和权限
  3. 检查系统资源使用情况
  4. 调整备份参数
  5. 重试备份操作
sql
-- 查看备份历史和失败原因
SELECT * FROM oceanbase.DBA_OB_BACKUP_HISTORY WHERE tenant_name = 'tenant_name' AND status = 'FAILED' ORDER BY backup_id DESC;