外观
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. 恢复前准备
- 确认备份存在:确保有可用的完整备份和归档日志
- 停止应用访问:避免恢复过程中数据被修改
- 准备恢复环境:确保恢复环境与原环境兼容
- 规划恢复时间点:确定需要恢复到的具体时间点
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. 性能优化建议
使用并行恢复:
sqlALTER SYSTEM SET restore_parallelism = 8; ALTER SYSTEM SET recovery_parallelism = 8;调整恢复缓冲区大小:
sqlALTER 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. 恢复失败问题
故障现象:恢复过程中出现错误,恢复失败
排查步骤:
- 查看恢复日志,确定错误原因
- 检查备份集完整性
- 检查归档日志是否完整
- 检查恢复环境配置
- 检查系统资源是否充足
解决方案:
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. 恢复时间过长问题
故障现象:恢复过程耗时过长
排查步骤:
- 检查恢复并行度设置
- 检查存储性能
- 检查系统负载
- 检查备份集大小
解决方案:
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. 归档日志缺失问题
故障现象:恢复过程中提示归档日志缺失
排查步骤:
- 检查归档日志配置
- 检查归档日志存储位置
- 检查归档日志保留时间
- 检查归档日志备份情况
解决方案:
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 功能的步骤:
- 启用归档日志
- 配置备份策略
- 定期执行备份
- 确保归档日志和备份集的完整性
Q2: PITR 恢复需要多长时间?
A2: PITR 恢复时间取决于以下因素:
- 备份集大小
- 归档日志量
- 恢复并行度
- 存储性能
- 系统负载
Q3: 如何确定最佳的 PITR 恢复时间点?
A3: 确定恢复时间点的方法:
- 根据业务日志确定误操作发生的时间
- 使用备份集和归档日志的时间范围
- 考虑业务影响,选择合适的恢复时间点
Q4: PITR 恢复会影响生产环境吗?
A4: PITR 恢复的影响:
- 本地恢复:会占用生产环境资源
- 远程恢复:对生产环境影响较小
- 建议在业务低峰期执行恢复操作
Q5: 如何验证 PITR 恢复的正确性?
A5: 验证恢复正确性的方法:
- 检查数据完整性
- 验证业务功能
- 比较恢复前后的关键指标
- 执行数据一致性检查
