Skip to content

OceanBase 备份脚本

备份脚本设计原则

1. 可靠性原则

  • 确保备份过程可靠,避免备份失败
  • 实现备份验证机制,确保备份数据可用
  • 处理异常情况,确保脚本能够稳定运行

2. 自动化原则

  • 支持定时自动执行,减少人工干预
  • 实现自动清理过期备份,释放存储空间
  • 提供自动告警机制,及时通知备份结果

3. 灵活性原则

  • 支持多种备份方式(全量、增量、日志备份)
  • 支持备份到不同存储介质
  • 支持自定义备份策略

4. 可监控原则

  • 提供详细的日志记录
  • 支持与监控系统集成
  • 提供备份状态查询功能

备份脚本架构

脚本组成

  • 主脚本:负责备份任务的调度和管理
  • 配置文件:存储备份相关的配置参数
  • 功能模块
    • 备份执行模块:执行具体的备份操作
    • 备份验证模块:验证备份数据的完整性
    • 备份清理模块:清理过期备份
    • 日志记录模块:记录备份过程和结果
    • 告警通知模块:发送备份结果通知

脚本目录结构

bash
ob_backup/
├── bin/
   └── ob_backup.sh          # 主脚本
├── conf/
   └── ob_backup.conf        # 配置文件
├── lib/
   ├── backup_exec.sh        # 备份执行模块
   ├── backup_verify.sh      # 备份验证模块
   ├── backup_clean.sh       # 备份清理模块
   ├── log.sh                # 日志记录模块
   └── alert.sh              # 告警通知模块
├── logs/                     # 日志目录
└── backup/                   # 备份数据目录

备份脚本实现

主脚本示例

bash
#!/bin/bash

# 加载配置文件
source /home/admin/ob_backup/conf/ob_backup.conf

# 加载功能模块
source /home/admin/ob_backup/lib/log.sh
source /home/admin/ob_backup/lib/backup_exec.sh
source /home/admin/ob_backup/lib/backup_verify.sh
source /home/admin/ob_backup/lib/backup_clean.sh
source /home/admin/ob_backup/lib/alert.sh

# 初始化日志
init_log "$LOG_DIR" "$LOG_NAME"

log_info "开始执行 OceanBase 备份任务"

# 执行全量备份
if [ "$FULL_BACKUP_ENABLED" = "true" ]; then
    log_info "开始执行全量备份"
    full_backup
    if [ $? -eq 0 ]; then
        log_info "全量备份成功"
        # 验证备份
        if [ "$BACKUP_VERIFY_ENABLED" = "true" ]; then
            log_info "开始验证全量备份"
            verify_backup "$BACKUP_TYPE" "$BACKUP_ID"
            if [ $? -eq 0 ]; then
                log_info "全量备份验证成功"
            else
                log_error "全量备份验证失败"
                send_alert "ERROR" "全量备份验证失败,备份ID:$BACKUP_ID"
            fi
        fi
    else
        log_error "全量备份失败"
        send_alert "ERROR" "全量备份失败"
        exit 1
    fi
fi

# 执行增量备份
if [ "$INCREMENTAL_BACKUP_ENABLED" = "true" ]; then
    log_info "开始执行增量备份"
    incremental_backup
    if [ $? -eq 0 ]; then
        log_info "增量备份成功"
        # 验证备份
        if [ "$BACKUP_VERIFY_ENABLED" = "true" ]; then
            log_info "开始验证增量备份"
            verify_backup "$BACKUP_TYPE" "$BACKUP_ID"
            if [ $? -eq 0 ]; then
                log_info "增量备份验证成功"
            else
                log_error "增量备份验证失败"
                send_alert "ERROR" "增量备份验证失败,备份ID:$BACKUP_ID"
            fi
        fi
    else
        log_error "增量备份失败"
        send_alert "ERROR" "增量备份失败"
        exit 1
    fi
fi

# 清理过期备份
if [ "$BACKUP_CLEAN_ENABLED" = "true" ]; then
    log_info "开始清理过期备份"
    clean_backup
    if [ $? -eq 0 ]; then
        log_info "过期备份清理成功"
    else
        log_error "过期备份清理失败"
        send_alert "WARNING" "过期备份清理失败"
    fi
fi

log_info "OceanBase 备份任务执行完成"
send_alert "INFO" "OceanBase 备份任务执行完成"

配置文件示例

bash
# 备份类型配置
BACKUP_TYPE="physical"           # physical 或 logical
FULL_BACKUP_ENABLED="true"       # 是否启用全量备份
INCREMENTAL_BACKUP_ENABLED="true" # 是否启用增量备份
LOG_BACKUP_ENABLED="true"        # 是否启用日志备份

# 备份存储配置
BACKUP_DIR="/home/admin/ob_backup/backup"  # 本地备份目录
REMOTE_BACKUP_ENABLED="false"     # 是否启用远程备份
REMOTE_BACKUP_HOST="backup-server" # 远程备份服务器
REMOTE_BACKUP_DIR="/backup/oceanbase" # 远程备份目录

# 备份策略配置
FULL_BACKUP_INTERVAL="7"          # 全量备份间隔(天)
INCREMENTAL_BACKUP_INTERVAL="1"   # 增量备份间隔(天)
LOG_BACKUP_INTERVAL="30"          # 日志备份间隔(分钟)
BACKUP_RETENTION_DAYS="30"        # 备份保留天数

# 数据库连接配置
OB_HOST="127.0.0.1"              # OceanBase 主机
OB_PORT="2881"                   # OceanBase 端口
OB_USER="root"                   # 数据库用户名
OB_PASSWORD="password"           # 数据库密码
OB_TENANT="sys"                  # 租户名

# 备份验证配置
BACKUP_VERIFY_ENABLED="true"      # 是否启用备份验证
VERIFY_SAMPLE_RATE="10"          # 验证采样率(%)

# 告警配置
ALERT_ENABLED="true"              # 是否启用告警
ALERT_TYPE="email"               # 告警类型:email 或 sms
EMAIL_RECIPIENTS="admin@example.com" # 邮件接收人
SMS_RECIPIENTS="13800138000"     # SMS 接收人

# 日志配置
LOG_DIR="/home/admin/ob_backup/logs" # 日志目录
LOG_NAME="ob_backup.log"         # 日志文件名
LOG_LEVEL="INFO"                 # 日志级别:DEBUG, INFO, WARN, ERROR

备份脚本使用方法

脚本执行

bash
# 直接执行备份脚本
/home/admin/ob_backup/bin/ob_backup.sh

# 指定配置文件执行
/home/admin/ob_backup/bin/ob_backup.sh -c /path/to/ob_backup.conf

# 执行特定类型的备份
/home/admin/ob_backup/bin/ob_backup.sh -t full
/home/admin/ob_backup/bin/ob_backup.sh -t incremental
/home/admin/ob_backup/bin/ob_backup.sh -t log

# 查看脚本帮助
/home/admin/ob_backup/bin/ob_backup.sh -h

定时任务配置

bash
# 编辑 crontab
crontab -e

# 添加定时任务
# 每天凌晨 2 点执行全量备份
0 2 * * * /home/admin/ob_backup/bin/ob_backup.sh -t full

# 每天凌晨 1 点执行增量备份
0 1 * * * /home/admin/ob_backup/bin/ob_backup.sh -t incremental

# 每 30 分钟执行一次日志备份
*/30 * * * * /home/admin/ob_backup/bin/ob_backup.sh -t log

备份脚本最佳实践

1. 备份策略设计

  • 全量备份:建议每周执行一次
  • 增量备份:建议每天执行一次
  • 日志备份:建议每 15-30 分钟执行一次
  • 备份保留时间:根据业务需求和存储空间情况确定

2. 备份存储建议

  • 使用独立的存储设备进行备份
  • 考虑备份数据的异地存储
  • 定期验证备份数据的可用性
  • 实现备份数据的加密存储

3. 脚本维护建议

  • 定期更新脚本,修复已知问题
  • 定期检查脚本运行状态
  • 定期测试备份恢复流程
  • 建立脚本版本控制

4. 监控与告警

  • 配置备份失败告警
  • 配置备份延迟告警
  • 配置备份存储不足告警
  • 定期检查备份日志

常见问题(FAQ)

Q1: 备份脚本执行失败怎么办?

A1: 处理方法:

  • 检查脚本日志,定位失败原因
  • 检查配置文件,确认配置参数正确
  • 检查数据库连接,确认能够正常连接到 OceanBase 集群
  • 检查备份存储目录,确认有足够的存储空间

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

A2: 验证方法:

  • 定期执行备份恢复测试,确保能够从备份中恢复数据
  • 使用备份验证工具验证备份数据的完整性
  • 检查备份日志,确认备份过程正常完成

Q3: 如何优化备份性能?

A3: 优化建议:

  • 选择合适的备份时间,避免业务高峰期
  • 调整备份并行度,提高备份速度
  • 使用高性能存储设备进行备份
  • 考虑使用压缩备份,减少备份数据量

Q4: 如何实现备份的异地存储?

A4: 实现方法:

  • 配置脚本支持远程备份,将备份数据复制到异地存储
  • 使用云存储服务,将备份数据上传到云存储
  • 实现备份数据的自动同步机制,确保异地备份数据的及时性

Q5: 如何处理备份存储不足的情况?

A5: 处理方法:

  • 增加备份存储容量
  • 调整备份保留策略,减少备份保留时间
  • 实现备份数据的分层存储,将旧备份迁移到低成本存储
  • 考虑使用压缩备份,减少备份数据量