StarRocks 备份与恢复实战:基于 MinIO 的 S3 存储方案

StarRocks 备份与恢复实战:基于 MinIO 的 S3 存储方案

为什么需要备份

StarRocks 作为一款 OLAP 分析型数据库,承载着大量业务报表和数据分析结果。虽然数据通常有上游数据源可以重跑,但以下场景备份依然必不可少:

  • 误操作恢复:DDL 误删表、数据误更新等
  • 版本升级回滚:大版本升级前做快照,出问题可快速回溯
  • 跨集群迁移:从测试环境到生产环境的数据同步
  • 灾备合规:满足数据安全审计要求

StarRocks 从 2.3 版本开始支持基于 Broker 的备份恢复能力,到 2.5 版本功能趋于完善。

备份恢复原理

StarRocks 的备份恢复依赖 Broker 组件 作为中间桥梁,将数据以快照(Snapshot)形式导出到外部存储。架构如下:

复制代码
FE (元数据调度) → Broker (数据传输) → S3/HDFS 存储
                  ↑
BE (数据文件)  ───┘

支持的存储后端:

  • S3 兼容的对象存储(MinIO、AWS S3、阿里云 OSS 等)
  • HDFS

版本差异:

版本 支持范围 限制
2.3 表级备份,仅支持 Duplicate/Aggregate/Unique 模型 不支持主键表、不支持物化视图、不支持整库备份
2.5+ 支持主键表、支持整库备份恢复 ---
3.3+ 功能趋于稳定 主键表部分场景仍有注意事项

注意:备份恢复目前不支持主键模型(Primary Key)的表,这是需要关注的限制。

环境准备

本文以 MinIO 作为 S3 兼容存储后端。MinIO 是一个开源的对象存储服务,部署简单,兼容 S3 协议。

启动 MinIO(Docker 方式)

bash 复制代码
docker run -d \
  --name minio \
  -p 9000:9000 -p 9001:9001 \
  -e MINIO_ROOT_USER=admin \
  -e MINIO_ROOT_PASSWORD=admin123456 \
  -v /data/minio:/data \
  minio/minio server /data --console-address ":9001"

访问 http://your_ip:9001 进入 MinIO 控制台,创建一个 Bucket 命名为 srbackup

确保 Broker 服务正常运行

bash 复制代码
# 检查 Broker 状态
mysql -h 127.0.0.1 -P9030 -uroot -e "SHOW PROC '/brokers';"

如果 Broker 未启动:

bash 复制代码
/data/StarRocks-3.1.7/apache_hdfs_broker/bin/start_broker.sh --daemon

创建备份仓库

备份仓库(Repository)是 StarRocks 中备份数据的存储目标,创建后可通过 SHOW REPOSITORIES 查看。

sql 复制代码
CREATE REPOSITORY `srbackup`
WITH BROKER `broker1`
ON LOCATION "s3a://srbackup"
PROPERTIES
(
    "fs.s3a.access.key" = "your_access_key",
    "fs.s3a.secret.key" = "your_secret_key",
    "fs.s3a.endpoint" = "http://192.168.1.100:9000",
    "fs.s3a.connection.ssl.enabled" = "false"
);

参数说明:

参数 说明
REPOSITORY 仓库名称,后续备份恢复时引用
BROKER Broker 名称,需与 SHOW PROC '/brokers' 中一致
LOCATION S3 Bucket 路径,格式 s3a://bucket_name
fs.s3a.access.key S3 Access Key
fs.s3a.secret.key S3 Secret Key
fs.s3a.endpoint S3 服务端点地址
fs.s3a.connection.ssl.enabled 是否启用 SSL(MinIO 本地部署通常设为 false)

查看已创建的仓库:

sql 复制代码
SHOW REPOSITORIES;

执行备份

表级备份

sql 复制代码
BACKUP SNAPSHOT a003.backup_1
TO srbackup
ON (
    tab1,
    tab2,
    tab3
)
PROPERTIES ("type" = "full");

说明:

  • SNAPSHOT 后跟快照名称,建议包含库名和版本号,如 db_name.backup_20260701
  • ON (...) 指定要备份的表名列表
  • type = "full" 表示全量备份(目前仅支持全量模式)

查看备份进度

sql 复制代码
-- 查看备份任务状态
SHOW BACKUP FROM a003;

-- 查看仓库中的快照列表
SHOW SNAPSHOT ON srbackup;

SHOW BACKUP 输出关键字段:

  • StatusCANCELLED / DOING / FINISHED
  • TaskMsg:错误时会显示详细错误信息
  • CreateTime / FinishTime:可据此计算备份耗时

执行恢复

在目标集群创建相同的仓库

恢复时需要指定 backup_timestamp,可从 SHOW SNAPSHOT ON srbackupSnapshot 名称中获取。

sql 复制代码
-- 1. 先在目标集群创建指向同一 S3 的仓库
CREATE REPOSITORY `srbackup`
WITH BROKER `broker1`
ON LOCATION "s3a://srbackup"
PROPERTIES
(
    "fs.s3a.access.key" = "your_access_key",
    "fs.s3a.secret.key" = "your_secret_key",
    "fs.s3a.endpoint" = "http://192.168.1.100:9000",
    "fs.s3a.connection.ssl.enabled" = "false"
);

-- 2. 查看可用快照,获取 backup_timestamp
SHOW SNAPSHOT ON srbackup;

-- 3. 执行恢复
RESTORE SNAPSHOT a003.backup_1
FROM srbackup
ON (
    tab1,
    tab2,
    tab3
)
PROPERTIES ("backup_timestamp" = "2022-10-28-11-25-16-351");

-- 4. 查看恢复进度
SHOW RESTORE;

backup_timestamp 获取方式:

执行 SHOW SNAPSHOT ON srbackup 后,输出的快照名称格式为 backup_name.backup_timestamp,取 . 后面的时间戳部分即可。

删除备份快照

sql 复制代码
-- 删除指定快照
DROP SNAPSHOT a003.backup_1 ON srbackup;

常见问题与注意事项

1. 主键表不支持备份恢复

这是最需要注意的限制。2.3 版本明确不支持,2.5+ 版本有所改善但部分场景仍有问题。建议在生产使用前在测试环境充分验证。

2. 备份期间的影响

备份操作会占用 FE 和 BE 的计算资源及网络带宽,建议在业务低峰期执行,尤其是大表全量备份。

3. 恢复前需确保表不存在

RESTORE 操作要求目标库中不存在同名表,否则恢复会失败。如需覆盖,先手动 DROP 目标表。

4. 跨版本兼容性

备份文件与 StarRocks 版本相关,跨主版本恢复(如从 2.3 恢复到 3.1)可能存在兼容性问题。建议在同版本或相邻版本间做备份恢复。

5. 备份存储容量规划

全量备份会复制所有数据文件到 S3,需根据数据量预估存储空间。建议在 MinIO Bucket 上配置生命周期策略,自动清理过期快照。

自动化备份脚本

以下是一个简单的 Shell 备份脚本,配合 crontab 实现定期备份:

bash 复制代码
#!/bin/bash
# starrocks_backup.sh

FE_HOST="127.0.0.1"
FE_PORT="9030"
USER="root"
PASSWORD="your_password"
DB_NAME="a003"
BACKUP_NAME="${DB_NAME}.backup_$(date +%Y%m%d)"

mysql -h ${FE_HOST} -P ${FE_PORT} -u${USER} -p${PASSWORD} -e "
BACKUP SNAPSHOT ${BACKUP_NAME}
TO srbackup
ON (tab1, tab2, tab3)
PROPERTIES ('type' = 'full');
"

echo "Backup ${BACKUP_NAME} submitted at $(date)"
bash 复制代码
# crontab:每周日凌晨 3 点执行
0 3 * * 0 /path/to/starrocks_backup.sh >> /var/log/sr_backup.log 2>&1

总结

StarRocks 的备份恢复功能整体比较简单,核心流程就是:建仓库 → 打快照 → 查看状态。关键注意点:

  1. 提前规划 S3 存储(MinIO 轻量够用)
  2. 注意主键表的兼容性限制
  3. 跨版本恢复前做好测试
  4. 配合 crontab 实现自动化,降低人工操作风险

备份是运维的最后一道防线,有了它你才敢放心折腾。

相关推荐
hangyuekejiGEO1 小时前
临沂GEO技术服务方案对比分析
大数据·人工智能·python
cc5725026531 小时前
大数据专业会不会过几年不火了
大数据
小五传输1 小时前
内外网文件交换系统产品推荐 解决隔离网络文件交换5类难题
大数据·运维·安全
ACP广源盛139246256732 小时前
GSV2231@ACP# 增强型 8K MST 多屏扩展芯片
大数据·人工智能·分布式·嵌入式硬件
code_pgf12 小时前
AI-Agent记忆机制分析
大数据·人工智能
cc57250265314 小时前
挑选大数据专业院校,重点参考哪几项指标
大数据
shushangyun_17 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
杨云龙UP20 小时前
MySQL基于XtraBackup物理备份搭建GTID主从复制操作手册
数据库·mysql·xtrabackup·主从复制·备份恢复·还原备份文件
利威尔·21 小时前
常用git命令
大数据·elasticsearch·搜索引擎