外观
OceanBase 物理备份与恢复
物理备份架构
备份组件
OceanBase Backup & Recovery (OBR)
- 功能:OceanBase 官方提供的物理备份恢复工具
- 支持的备份介质:本地磁盘、NFS、OSS、S3 等
- 支持的备份类型:全量备份、增量备份、日志备份
- 支持的恢复类型:全量恢复、增量恢复、PITR 恢复
备份代理
- 功能:负责在各个节点上执行备份和恢复操作
- 部署位置:每个 OceanBase 节点上部署
- 通信方式:与 OBR 工具通信,执行备份恢复命令
- 资源管理:自动管理备份所需的 CPU、内存和磁盘资源
备份存储
- 本地存储:备份到本地磁盘,适合测试环境
- 网络存储:备份到 NFS、NAS 等网络存储
- 对象存储:备份到 OSS、S3 等对象存储
- 磁带库:备份到磁带库,适合长期归档
备份流程
全量备份流程
备份准备:
- 检查集群状态,确保集群正常运行
- 检查备份存储,确保有足够的空间
- 检查备份代理,确保代理正常运行
备份执行:
- OBR 工具发送备份命令到备份代理
- 备份代理在每个节点上执行备份操作
- 备份数据文件和元数据
- 备份完成后生成备份集
备份验证:
- 验证备份集的完整性
- 验证备份集的可用性
- 记录备份日志和元数据
增量备份流程
备份准备:
- 检查上次备份的位置
- 检查增量备份所需的归档日志
- 检查备份存储,确保有足够的空间
备份执行:
- OBR 工具发送增量备份命令到备份代理
- 备份代理在每个节点上执行增量备份操作
- 备份自上次备份以来变化的数据块
- 备份完成后生成增量备份集
备份验证:
- 验证增量备份集的完整性
- 验证增量备份集与全量备份集的一致性
- 记录备份日志和元数据
物理备份配置
OBR 工具安装
安装步骤
bash
# 下载 OBR 工具
wget https://mirrors.aliyun.com/oceanbase/community/stable/el/7/x86_64/obbackup-2.2.70-1.el7.x86_64.rpm
# 安装 OBR 工具
yum install -y obbackup-2.2.70-1.el7.x86_64.rpm
# 验证安装
obbackup --version配置文件
yaml
# OBR 配置文件 ~/.obbackup/config.yaml
global:
user: "admin"
password: "password"
sys_user: "root"
sys_password: "root_password"
cluster_id: 1
tenant_name: "sys"
backup_dest: "oss://backup-bucket/ob-backup"
oss_config:
endpoint: "oss-cn-hangzhou.aliyuncs.com"
access_key_id: "your_access_key_id"
access_key_secret: "your_access_key_secret"
region: "cn-hangzhou"备份存储配置
OSS 存储配置
bash
# 配置 OSS 存储
obbackup config add storage_type=oss endpoint=oss-cn-hangzhou.aliyuncs.com access_key_id=your_access_key_id access_key_secret=your_access_key_secret bucket=backup-bucket
# 查看存储配置
obbackup config listNFS 存储配置
bash
# 挂载 NFS 存储
mount -t nfs nfs-server:/backup /mnt/backup
# 配置 NFS 存储
obbackup config add storage_type=nfs path=/mnt/backup本地存储配置
bash
# 创建本地备份目录
mkdir -p /data/ob-backup
# 配置本地存储
obbackup config add storage_type=local path=/data/ob-backup物理备份操作
全量备份
命令格式
bash
obbackup backup --cluster=obcluster --tenant=tenant1 --backup_type=full --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=full_backup_20231001常用选项
- --cluster:指定集群名称
- --tenant:指定租户名称
- --backup_type:指定备份类型(full, incremental, differential)
- --backup_dest:指定备份存储位置
- --backup_set_name:指定备份集名称
- --parallel:指定并行备份线程数
- --compress:启用压缩备份
- --encrypt:启用加密备份
示例
bash
# 全量备份 sys 租户
obbackup backup --cluster=obcluster --tenant=sys --backup_type=full --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=sys_full_backup_20231001 --parallel=8 --compress
# 全量备份业务租户
obbackup backup --cluster=obcluster --tenant=business --backup_type=full --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --parallel=16 --compress --encrypt增量备份
命令格式
bash
obbackup backup --cluster=obcluster --tenant=tenant1 --backup_type=incremental --backup_dest=oss://backup-bucket/ob-backup --base_backup_set=full_backup_20231001 --backup_set_name=incr_backup_20231002常用选项
- --base_backup_set:指定基础备份集名称
- --from_lsn:指定增量备份的起始 LSN
- --to_lsn:指定增量备份的结束 LSN
示例
bash
# 增量备份业务租户
obbackup backup --cluster=obcluster --tenant=business --backup_type=incremental --backup_dest=oss://backup-bucket/ob-backup --base_backup_set=business_full_backup_20231001 --backup_set_name=business_incr_backup_20231002 --parallel=16 --compress
# 基于 LSN 的增量备份
obbackup backup --cluster=obcluster --tenant=business --backup_type=incremental --backup_dest=oss://backup-bucket/ob-backup --from_lsn=1000000000 --to_lsn=2000000000 --backup_set_name=business_incr_backup_20231002 --parallel=16 --compress差异备份
命令格式
bash
obbackup backup --cluster=obcluster --tenant=tenant1 --backup_type=differential --backup_dest=oss://backup-bucket/ob-backup --base_backup_set=full_backup_20231001 --backup_set_name=diff_backup_20231002示例
bash
# 差异备份业务租户
obbackup backup --cluster=obcluster --tenant=business --backup_type=differential --backup_dest=oss://backup-bucket/ob-backup --base_backup_set=business_full_backup_20231001 --backup_set_name=business_diff_backup_20231002 --parallel=16 --compress日志备份
命令格式
bash
obbackup backup --cluster=obcluster --tenant=tenant1 --backup_type=log --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=log_backup_20231001示例
bash
# 备份归档日志
obbackup backup --cluster=obcluster --tenant=business --backup_type=log --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_log_backup_20231001 --parallel=8备份管理
查看备份集
命令格式
bash
obbackup list --backup_dest=oss://backup-bucket/ob-backup示例
bash
# 查看所有备份集
obbackup list --backup_dest=oss://backup-bucket/ob-backup
# 查看特定租户的备份集
obbackup list --backup_dest=oss://backup-bucket/ob-backup --tenant=business
# 查看特定类型的备份集
obbackup list --backup_dest=oss://backup-bucket/ob-backup --backup_type=full验证备份集
命令格式
bash
obbackup validate --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=full_backup_20231001示例
bash
# 验证备份集完整性
obbackup validate --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001
# 验证备份集可恢复性
obbackup validate --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --check_recoverable删除备份集
命令格式
bash
obbackup delete --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=full_backup_20231001示例
bash
# 删除过期备份集
obbackup delete --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20230901
# 根据备份时间删除备份集
obbackup delete --backup_dest=oss://backup-bucket/ob-backup --before='2023-09-01 00:00:00'备份集导出
命令格式
bash
obbackup export --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=full_backup_20231001 --export_path=/data/export示例
bash
# 导出备份集到本地
obbackup export --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --export_path=/data/export物理恢复操作
恢复前准备
检查恢复环境
bash
# 检查目标集群状态
obclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SHOW CLUSTER STATUS;"
# 检查目标租户状态
obclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SHOW TENANTS;"
# 检查恢复存储
obbackup config list准备恢复目录
bash
# 创建恢复目录
mkdir -p /data/ob-recovery
# 授权恢复目录
chown -R oceanbase:oceanbase /data/ob-recovery全量恢复
命令格式
bash
obbackup restore --cluster=obcluster --tenant=tenant1 --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=full_backup_20231001 --restore_path=/data/ob-recovery示例
bash
# 全量恢复业务租户
obbackup restore --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --restore_path=/data/ob-recovery --parallel=16增量恢复
命令格式
bash
obbackup restore --cluster=obcluster --tenant=tenant1 --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=incr_backup_20231002 --base_backup_set=full_backup_20231001 --restore_path=/data/ob-recovery示例
bash
# 增量恢复业务租户
obbackup restore --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_incr_backup_20231002 --base_backup_set=business_full_backup_20231001 --restore_path=/data/ob-recovery --parallel=16PITR 恢复
命令格式
bash
obbackup restore --cluster=obcluster --tenant=tenant1 --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=full_backup_20231001 --recovery_time='2023-10-02 14:30:00' --restore_path=/data/ob-recovery示例
bash
# PITR 恢复业务租户到指定时间点
obbackup restore --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --recovery_time='2023-10-02 14:30:00' --restore_path=/data/ob-recovery --parallel=16
# PITR 恢复业务租户到指定 LSN
obbackup restore --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --recovery_lsn=1500000000 --restore_path=/data/ob-recovery --parallel=16恢复后验证
验证集群状态
bash
# 验证集群状态
obclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SHOW CLUSTER STATUS;"
# 验证租户状态
obclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SHOW TENANTS;"
# 验证数据完整性
obclient -h127.0.0.1 -P2881 -ubusiness -p -c -A business -e "SELECT COUNT(*) FROM test_table;"备份恢复最佳实践
备份策略设计
全量备份策略
- 备份频率:每周一次全量备份
- 备份时间:业务低峰期,如凌晨 2:00-6:00
- 备份保留时间:保留 4 周
- 备份介质:对象存储(OSS/S3)+ 本地磁盘
增量备份策略
- 备份频率:每天一次增量备份
- 备份时间:业务低峰期,如凌晨 1:00-2:00
- 备份保留时间:保留 1 周
- 备份介质:对象存储(OSS/S3)
日志备份策略
- 备份频率:每小时一次日志备份
- 备份时间:每小时整点
- 备份保留时间:保留 2 周
- 备份介质:对象存储(OSS/S3)
备份性能优化
并行备份
bash
# 使用 16 个并行线程进行备份
obbackup backup --cluster=obcluster --tenant=business --backup_type=full --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --parallel=16压缩备份
bash
# 启用压缩备份
obbackup backup --cluster=obcluster --tenant=business --backup_type=full --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --compress增量备份
bash
# 使用增量备份减少备份时间和空间
obbackup backup --cluster=obcluster --tenant=business --backup_type=incremental --backup_dest=oss://backup-bucket/ob-backup --base_backup_set=business_full_backup_20231001 --backup_set_name=business_incr_backup_20231002恢复性能优化
并行恢复
bash
# 使用 16 个并行线程进行恢复
obbackup restore --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --restore_path=/data/ob-recovery --parallel=16直接恢复到目标位置
bash
# 直接恢复到目标数据目录
obbackup restore --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --restore_path=/data/ob/data --direct预恢复准备
bash
# 提前准备恢复环境
obbackup prepare --cluster=obcluster --tenant=business --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001 --restore_path=/data/ob-recovery常见问题处理
备份失败
症状
- 备份命令执行失败
- 报错信息包含 "Backup failed" 或 "Failed to backup"
- 备份日志显示错误信息
解决方案
检查集群状态:
bashobclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SHOW CLUSTER STATUS;"检查备份存储:
bashobbackup config list检查备份日志:
bashtail -n 100 /home/oceanbase/obbackup/logs/obbackup.log检查磁盘空间:
bashdf -h检查网络连接:
bashping oss-cn-hangzhou.aliyuncs.com
恢复失败
症状
- 恢复命令执行失败
- 报错信息包含 "Restore failed" 或 "Failed to restore"
- 恢复日志显示错误信息
- 目标集群或租户无法启动
解决方案
检查目标环境:
bashobclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SHOW CLUSTER STATUS;"检查备份集完整性:
bashobbackup validate --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=business_full_backup_20231001检查恢复日志:
bashtail -n 100 /home/oceanbase/obbackup/logs/obbackup.log检查恢复目录权限:
bashls -la /data/ob-recovery检查目标集群版本:
bashobclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -e "SELECT version();"
备份集损坏
症状
- 备份集验证失败
- 恢复时提示备份集损坏
- 备份日志显示校验和错误
解决方案
- 重新备份:删除损坏的备份集,重新进行备份
- 使用冗余备份:如果有多个备份集,使用其他备份集进行恢复
- 检查备份存储:检查备份存储的可靠性,如磁盘坏道、网络故障等
- 启用备份校验:在备份时启用校验和验证
恢复后数据不一致
症状
- 恢复后数据与预期不符
- 表数据缺失或错误
- 索引损坏
解决方案
- 验证备份集:验证备份集的完整性和一致性
- 重新恢复:使用正确的备份集重新进行恢复
- 检查恢复命令:检查恢复命令的参数是否正确
- 执行数据校验:恢复后执行数据校验,如检查表行数、索引完整性等
常见问题(FAQ)
Q1: 物理备份和逻辑备份有什么区别?
A1: 物理备份和逻辑备份的主要区别:
- 备份对象:物理备份备份物理文件,逻辑备份备份逻辑数据(SQL 语句)
- 备份速度:物理备份速度快,逻辑备份速度慢
- 恢复速度:物理恢复速度快,逻辑恢复速度慢
- 占用空间:物理备份占用空间小,逻辑备份占用空间大
- 适用场景:物理备份适合大规模数据库,逻辑备份适合小规模数据库
Q2: 如何选择合适的备份类型?
A2: 选择备份类型的依据:
- 数据库大小:TB 级以上数据库建议使用物理备份
- 备份时间要求:要求备份时间短的场景使用物理备份
- 恢复时间要求:要求恢复时间短的场景使用物理备份
- 备份空间要求:备份空间有限的场景使用物理备份
- 数据迁移需求:需要跨版本、跨平台迁移的场景使用逻辑备份
Q3: 如何备份 OceanBase 集群中的多个租户?
A3: 备份多个租户的方法:
- 逐个备份:使用循环脚本逐个备份每个租户
- 并行备份:同时备份多个租户,提高备份效率
- 集群级备份:备份整个集群,包含所有租户
bash
# 逐个备份租户
for tenant in $(obclient -h127.0.0.1 -P2881 -uroot -p -c -A oceanbase -N -e "SHOW TENANTS WHERE tenant_name NOT IN ('sys', 'meta');"); do
obbackup backup --cluster=obcluster --tenant=$tenant --backup_type=full --backup_dest=oss://backup-bucket/ob-backup --backup_set_name=${tenant}_full_backup_$(date +%Y%m%d) --parallel=8 --compress
doneQ4: 如何实现备份的自动化?
A4: 实现备份自动化的方法:
- 使用 crontab:配置 crontab 定时执行备份脚本
- 使用 Ansible:使用 Ansible 自动化备份流程
- 使用 OCP:使用 OceanBase Cloud Platform (OCP) 管理备份
- 自定义脚本:编写自定义脚本,实现备份、验证、清理等自动化流程
Q5: 如何监控备份任务的执行状态?
A5: 监控备份任务的方法:
- 查看备份日志:实时查看备份日志,了解备份进度
- 使用 OCP 监控:通过 OCP 监控备份任务的执行状态
- 配置告警:配置备份失败告警,及时发现备份问题
- 定期验证:定期验证备份集的完整性和可恢复性
Q6: 如何处理备份存储的扩容?
A6: 处理备份存储扩容的方法:
- 对象存储:自动扩容,无需手动操作
- 本地磁盘:添加新的磁盘,挂载到备份目录
- NFS 存储:扩展 NFS 存储容量
- 备份集迁移:将旧备份集迁移到归档存储,释放空间
Q7: 如何实现跨区域备份?
A7: 实现跨区域备份的方法:
- 使用跨区域复制:配置对象存储的跨区域复制功能
- 手动复制:定期将备份集复制到其他区域
- 跨区域备份任务:在其他区域执行备份任务
- 使用 OCP:通过 OCP 配置跨区域备份策略
Q8: 如何恢复到不同的集群?
A8: 恢复到不同集群的方法:
- 同版本恢复:确保目标集群版本与备份集群版本相同
- 使用 OBR 工具:使用 OBR 工具的恢复功能
- 配置目标集群:确保目标集群配置与备份集群兼容
- 执行恢复验证:恢复后执行数据验证,确保数据一致性
Q9: 如何实现 PITR(Point-in-Time Recovery)?
A9: 实现 PITR 恢复的方法:
- 启用归档日志:确保数据库已启用归档日志
- 定期备份日志:定期备份归档日志
- 使用 OBR 工具:使用 OBR 工具的 PITR 恢复功能
- 指定恢复时间点:在恢复时指定目标时间点或 LSN
Q10: 如何优化备份和恢复的性能?
A10: 优化备份和恢复性能的方法:
- 使用并行备份:增加并行线程数,提高备份速度
- 启用压缩:在备份时启用压缩,减少备份时间和空间
- 使用增量备份:使用增量备份减少备份数据量
- 优化存储:使用高性能存储,如 NVMe SSD、对象存储
- 合理规划备份时间:在业务低峰期进行备份,减少对业务的影响
