Skip to content

OceanBase 时点恢复(PITR)配置与使用

PITR 配置要求

1. 基础配置

sql
-- 启用归档日志
ALTER SYSTEM SET enable_syslog_recycle = true;
ALTER SYSTEM SET max_syslog_file_count = 100;
ALTER SYSTEM SET max_syslog_keep_time = 7;

-- 配置备份目录
ALTER SYSTEM SET backup_dest = 'file:///backup/ob_backup';

-- 配置恢复目录
ALTER SYSTEM SET restore_dest = 'file:///restore/ob_restore';

2. 归档日志配置

sql
-- 启用归档日志
ALTER SYSTEM SET enable_archive_log = true;

-- 设置归档日志保留时间(天)
ALTER SYSTEM SET archive_log_keep_time = 30;

-- 设置归档日志大小限制(MB)
ALTER SYSTEM SET archive_log_file_size = 1024;

-- 设置归档日志目录
ALTER SYSTEM SET archive_log_dest = 'file:///archive/ob_archive';

3. 备份策略配置

sql
-- 创建备份策略
CREATE BACKUP STRATEGY backup_strategy
  BACKUP_TYPE = 'FULL',
  BACKUP_CYCLE = '7D',
  BACKUP_RETENTION = '30D',
  BACKUP_DEST = 'file:///backup/ob_backup';

-- 创建增量备份策略
CREATE BACKUP STRATEGY incr_backup_strategy
  BACKUP_TYPE = 'INCREMENTAL',
  BACKUP_CYCLE = '1D',
  BACKUP_RETENTION = '7D',
  BACKUP_DEST = 'file:///backup/ob_backup';

PITR 恢复流程

1. 恢复前准备

  1. 确认备份存在:确保有可用的完整备份和归档日志
  2. 停止应用访问:避免恢复过程中数据被修改
  3. 准备恢复环境:确保恢复环境与原环境兼容
  4. 规划恢复时间点:确定需要恢复到的具体时间点

2. 执行 PITR 恢复

sql
-- 1. 查看可用备份集
SELECT * FROM oceanbase.GV$OB_BACKUP_SET ORDER BY backup_set_id DESC;

-- 2. 选择合适的完整备份集
SET @backup_set_id = 'backup_set_id_value';

-- 3. 执行基础恢复
RESTORE DATABASE FROM BACKUP SET @backup_set_id WITH RECOVERY NOREDO;

-- 4. 应用归档日志到指定时间点
RECOVER DATABASE UNTIL TIME '2024-01-18 10:30:00';

-- 5. 完成恢复
RESTORE DATABASE FINISH RECOVERY;

3. 租户级 PITR 恢复

sql
-- 1. 切换到系统租户
ALTER SYSTEM CHANGE TENANT sys;

-- 2. 查看租户备份信息
SELECT * FROM oceanbase.GV$OB_TENANT_BACKUP WHERE tenant_name = 'mysql_tenant';

-- 3. 执行租户级时点恢复
RESTORE TENANT mysql_tenant
  FROM BACKUP SET @backup_set_id
  UNTIL TIME '2024-01-18 10:30:00';

-- 4. 验证恢复结果
ALTER SYSTEM CHANGE TENANT mysql_tenant;
SELECT * FROM important_table WHERE condition;

4. 表级 PITR 恢复

sql
-- 1. 创建恢复表空间
CREATE TABLESPACE restore_ts DATAFILE 'restore_ts.dbf' SIZE 10G;

-- 2. 执行表级时点恢复
RESTORE TABLE important_table
  FROM BACKUP SET @backup_set_id
  UNTIL TIME '2024-01-18 10:30:00'
  TO TABLESPACE restore_ts
  RENAME TO restored_important_table;

-- 3. 验证恢复的表
SELECT * FROM restored_important_table WHERE condition;

-- 4. 替换原表(可选)
RENAME TABLE important_table TO important_table_old;
RENAME TABLE restored_important_table TO important_table;

PITR 最佳实践

1. 备份策略最佳实践

  • 定期执行完整备份:根据数据量和业务需求,每周或每月执行一次完整备份
  • 频繁执行增量备份:每天或每小时执行一次增量备份
  • 归档日志保留足够时间:根据业务需求设置合理的归档日志保留时间
  • 验证备份完整性:定期验证备份的完整性和可恢复性

2. 恢复流程最佳实践

  • 提前规划恢复策略:制定详细的恢复流程和应急方案
  • 测试恢复流程:定期测试 PITR 恢复流程,确保在真正需要时能够顺利执行
  • 记录恢复过程:详细记录恢复过程和结果,便于后续分析和改进
  • 验证恢复结果:恢复完成后,彻底验证数据完整性和业务可用性

3. 性能优化建议

  • 使用并行恢复

    sql
    ALTER SYSTEM SET restore_parallelism = 8;
    ALTER SYSTEM SET recovery_parallelism = 8;
  • 调整恢复缓冲区大小

    sql
    ALTER SYSTEM SET restore_buffer_size = '16M';
    ALTER SYSTEM SET recovery_buffer_size = '32M';
  • 优化存储性能:使用高性能存储设备存放备份和归档日志

PITR 恢复验证

1. 数据完整性验证

sql
-- 检查表行数
SELECT COUNT(*) FROM important_table;

-- 检查关键数据
SELECT * FROM important_table WHERE primary_key IN (1, 2, 3);

-- 验证数据一致性
SELECT CHECKSUM(*) FROM important_table;

2. 业务可用性验证

  • 执行业务关键操作
  • 检查应用程序连接
  • 验证查询性能
  • 检查事务处理

3. 日志验证

sql
-- 查看恢复日志
SELECT * FROM oceanbase.GV$OB_RESTORE_HISTORY ORDER BY start_time DESC LIMIT 1;

-- 查看归档日志应用情况
SELECT * FROM oceanbase.GV$OB_ARCHIVE_LOG_APPLY_STATUS;

常见 PITR 故障排除

1. 恢复失败问题

故障现象:恢复过程中出现错误,恢复失败

排查步骤

  1. 查看恢复日志,确定错误原因
  2. 检查备份集完整性
  3. 检查归档日志是否完整
  4. 检查恢复环境配置
  5. 检查系统资源是否充足

解决方案

sql
-- 查看恢复日志
SELECT * FROM oceanbase.GV$OB_RESTORE_HISTORY WHERE status = 'FAILED' ORDER BY start_time DESC LIMIT 1;

-- 验证备份集完整性
VALIDATE BACKUP SET @backup_set_id;

-- 检查归档日志连续性
SELECT * FROM oceanbase.GV$OB_ARCHIVE_LOG WHERE start_time BETWEEN 'start_time' AND 'end_time' ORDER BY start_time;

2. 恢复时间过长问题

故障现象:恢复过程耗时过长

排查步骤

  1. 检查恢复并行度设置
  2. 检查存储性能
  3. 检查系统负载
  4. 检查备份集大小

解决方案

sql
-- 调整恢复并行度
ALTER SYSTEM SET restore_parallelism = 16;
ALTER SYSTEM SET recovery_parallelism = 16;

-- 优化恢复缓冲区
ALTER SYSTEM SET restore_buffer_size = '32M';
ALTER SYSTEM SET recovery_buffer_size = '64M';

3. 归档日志缺失问题

故障现象:恢复过程中提示归档日志缺失

排查步骤

  1. 检查归档日志配置
  2. 检查归档日志存储位置
  3. 检查归档日志保留时间
  4. 检查归档日志备份情况

解决方案

sql
-- 检查归档日志配置
SHOW PARAMETERS LIKE '%archive%';

-- 检查归档日志存储位置
SELECT * FROM oceanbase.GV$OB_ARCHIVE_LOG_DEST;

-- 调整归档日志保留时间
ALTER SYSTEM SET archive_log_keep_time = 60;

PITR 与其他恢复方式对比

恢复方式恢复粒度恢复速度数据丢失风险适用场景
完整恢复整个数据库较慢可能丢失最近数据数据库完全损坏
增量恢复自上次备份以来中等可能丢失部分数据数据库部分损坏
PITR 恢复任意时间点较慢最小化数据丢失误操作、逻辑错误
表级恢复单个表较快单表误操作

常见问题(FAQ)

Q1: 如何启用 PITR 功能?

A1: 启用 PITR 功能的步骤:

  1. 启用归档日志
  2. 配置备份策略
  3. 定期执行备份
  4. 确保归档日志和备份集的完整性

Q2: PITR 恢复需要多长时间?

A2: PITR 恢复时间取决于以下因素:

  • 备份集大小
  • 归档日志量
  • 恢复并行度
  • 存储性能
  • 系统负载

Q3: 如何确定最佳的 PITR 恢复时间点?

A3: 确定恢复时间点的方法:

  • 根据业务日志确定误操作发生的时间
  • 使用备份集和归档日志的时间范围
  • 考虑业务影响,选择合适的恢复时间点

Q4: PITR 恢复会影响生产环境吗?

A4: PITR 恢复的影响:

  • 本地恢复:会占用生产环境资源
  • 远程恢复:对生产环境影响较小
  • 建议在业务低峰期执行恢复操作

Q5: 如何验证 PITR 恢复的正确性?

A5: 验证恢复正确性的方法:

  • 检查数据完整性
  • 验证业务功能
  • 比较恢复前后的关键指标
  • 执行数据一致性检查